我正在对移动语义进行一些测试,我尝试了这个:
class A{
public:
A(){printf("A CTOR\n");}
A(A&) {printf("A CTOR by copy\n");}
A(A&&){printf("A CTOR by universal reverence\n");}
};
A&& create(){
A v;
return std::move(v);
}
auto x{ create() };//this does not compile
float d[]{1.2,1.3,5,6};//this does compile
我收到以下错误:
error C3086: cannot find 'std::initializer_list': you need to #include <initializer_list>
我不明白,因为初始化列表功能已通过 CTP2012 nov. 添加到 VC11 中。这是因为我们必须等待 stdlib 的更新吗?
我认为代码是正确的,因为我从 Scott meyers 的幻灯片中复制了它:Move Semantics, Rvalue References, Perfect Forwarding。
感谢您的帮助。 供您参考,出现虚假副本是因为我没有在我的 CTOR 中逐个添加“const”。 最好的