변수를 컴파일러 생성 문자열로 구분하려면 어떻게해야합니까? 예를 들어, 오른쪽 값 "Hello, World"은 const char*입니다. const char* 그 자체가 포인터를 변경할 수 없다는 것을 의미하지는 않습니다. char* const 포인터는 변경할 수 없지만 컴파일러가 생성 한 포인터는 아닙니다. 즉, const char*이있는 컨테이너의 경
는 다음 사항을 고려하십시오 : struct X
{
Y y_;
X(const Y & y) :y_(y) {}
X(Y && y) :y_(std::move(y)) {}
};
은 이동의 의미를 최대한 활용하기 위해 두 번째 같은 생성자를 정의 할 필요가 있습니까? 또는 적절한 상황에서 자동으로 처리 될 것인가?
위키피디아의 special member functions에 대한 기사에는 생성자 이동 및 할당 할당 연산자에 대한 참조가 없습니다. 항목을 업데이트하고 싶지만 0x 표준이 무엇을 말하는지 잘 모르겠습니다. 이 두 기능에 관한 규칙은 무엇입니까? 그들은 자동으로 컴파일러에 의해 생성됩니까? 그렇다면 언제입니까? 편집 :이 (필요한 경우) 모양으로 그것을 편집
std::stack::pop()I claimed에 대한 질문에서 pop 값을 반환하지 않는 이유는 예외 안전성 때문입니다 (복사 생성자가 throw하는 경우 어떻게됩니까?). @Konrad은 이제 의미 이동과 관련하여 더 이상 관련이 없다고 설명했습니다. 사실입니까? AFAIK, 이동 생성자 canthrow, 그러나 아마도 noexcept을 사용하면 여전히
다음 함수를 고려하십시오. Foo foo(Foo x)
{
return x;
}
return x이 복사 생성자 또는 이동 생성자를 호출합니까? 조사할만한 이동 가능하지만 복사 할 수없는 간단한 Foo 클래스를 작성했습니다. struct Foo
{
Foo() = default;
Foo(const Foo&) = delete;
이 rvalue 호출이 모호한 이유는 무엇입니까? 나는 AA와 AA를 가질 수 & 그리고 컴파일러는 AA&을 사용하는 것을 알게 될 것이다. 하지만 세 번째 옵션을 추가 할 때 오류가 발생합니다. 분명히 AA & &은 더 나은 과부하이며, int의 int와 같은 다른 것은 더 길다. 왜 이것이 모호한가요? 3 가지 과부하를 모두 지킬 수있는 방법이 있습니까
선언되지 않았다면 constexpr, std::forward은 인수를 전달하는 모든 함수에 대해 constexpr-ness를 무시합니다. 왜 std::forward은 constexpr으로 선언되지 않으므로 constexpr-ness를 유지할 수 있습니까? 예 : (g 테스트 ++ 스냅 샷 2011-02-19) #include <utility>
templ