关于Visual Studio 2015是否支持生成默认移动构造函数,似乎存在冲突的文档。
This link和this link似乎说不,而this link说是。
我尝试了一些简单的事情:
class Test {
public:
Test(int data) : data(data) {}
Test(Test&& other) = default;
Test(Test& other) = delete;
int data;
};
int main() {
Test c(3);
std::cout << c.data << std::endl;
Test b(std::move(c));
std::cout << b.data << std::endl;
}
按预期打印出3和3。我是犯了一些错误还是实际生成了默认的移动构造函数?
编辑:删除&#34;隐含&#34;措词
答案 0 :(得分:4)
正在生成移动构造函数。只是通过复制来实现移动if (no != null && noparent != null && no.name == noparent.name)
{
//do something
}
(将&#34;移动的&#34;对象设置为其他值会比将其保留原样更昂贵。)
您可以使用详细的可移动类型作为数据成员而不是int
来测试这一点。
答案 1 :(得分:2)
你说的两个链接告诉你'不'告诉你'是'。
Visual Studio 2015支持default
和deleted
功能。
我认为在第二个链接中已经明确说明了这一点。
C ++使用“默认”一词的方式存在一些潜在的混淆。
在大多数情况下,我们都明白要求默认是获得你原本应该得到的东西 - 没什么特别的。
但在这些情况下,它实际上意味着“重新引入默认实现”。
那是:
Test(Test&& other) = default;
并不意味着“根据类的其他功能提供或不提供移动构造函数的默认操作”。
这意味着'确实提供了移动构造函数的默认实现,即使它不会(默认情况下)根据类的其他功能提供'。
请阅读=
说'将此分配给默认实现'而不是'在此处执行默认操作。
我希望有所帮助。