为什么这个:
struct A
{
A(int) {
cout << "construct from int" << endl;
}
A(A&&) = delete;
A(const A &) {
cout << "copy constructor" << endl;
}
};
int main(){
A a = 0;
}
Run Code Online (Sandbox Code Playgroud)
给我一个错误:
error: use of deleted function ‘A::A(A&&)’
Run Code Online (Sandbox Code Playgroud)
为什么当我添加这样的移动构造函数
A(A&&) {
cout << "move constructor" << endl;
}
Run Code Online (Sandbox Code Playgroud)
编译很好,但程序的输出只是
construct from int
Run Code Online (Sandbox Code Playgroud)
所以据我所知,编译器要求构造函数但不使用它.为什么?这对我来说毫无意义.
PS我认为
A a = 0;
Run Code Online (Sandbox Code Playgroud)
是等价的
A a = A(0);
Run Code Online (Sandbox Code Playgroud)
但为什么既不移动构造函数也不移动赋值运算符?