이 이유 :명시 적으로 삭제 이동 생성자
error: use of deleted function ‘A::A(A&&)’
그리고는 이동 생성자를 추가 할 때
A(A&&) {
cout << "move constructor" << endl;
}
가 잘 컴파일,하지만 왜 programm에의의 :
struct A
{
A(int) {
cout << "construct from int" << endl;
}
A(A&&) = delete;
A(const A &) {
cout << "copy constructor" << endl;
}
};
int main(){
A a = 0;
}
나에게 오류를 제공합니다 출력은 단지
입니다.그래서 내가 아는 한 컴파일러는 생성자를 요청하지만 사용하지 않습니다. 왜? 이것은 나에게 의미가 없습니다.
P. 나는
A a = 0;
이
A a = A(0);
만의 것과 동일합니다 이유도 이동 생성자도 이동 할당 연산자가 호출되어 있다고 가정?
를? – Brotcrunsher
이것은 C++ 17에서 변경되었습니다 (삭제 된 이동 생성자는 지금 컴파일됩니다). 그러나 copy/move elision은 항상 그 전에 문제였습니다. – chris
g ++ 4.9, g ++ 6.3 및 clang 5.0에서 모두 시도했습니다. (-O0 -std = C++ 11) –