在以下代码中,创建对象的行仅使用 gccnested
打印“构造函数” ,而不是 VS 2013:
#include <iostream>
using namespace std;
struct test {
test() { cout << "constructor" << endl; }
test(const test&) { cout << "copy constructor" << endl; }
test(test&&) { cout << "move constructor" << endl; }
~test() { cout << "destructor" << endl; }
};
struct nested {
test t;
// nested() {}
};
auto main() -> int {
// prints "constructor", "copy constructor" and "destructor"
auto n = nested{};
cout << endl;
return 0;
}
输出:
constructor
copy constructor
destructor
destructor
所以我猜这里发生的事情是一个临时对象被复制到n
. 没有编译器生成的移动构造函数,所以这就是它不是移动的原因。
我想知道这是错误还是可接受的行为?为什么添加默认构造函数会阻止此处复制?