我在Visual 2013中编译并运行了以下代码,它打印出移动对象的内容没有改变。我知道移动的对象只能从另一个对象中销毁或分配,所以我的代码不是标准的抱怨。但不管怎样..。
#include <iostream>
#include <vector>
#include <string>
#include <utility>
struct Foo
{
std::string str;
std::vector<int> vec;
};
int main()
{
Foo foo = {"abc", {1, 2, 3}};
Foo foo2( std::move(foo) );
std::cout << foo.str.size() << '\n' << foo.vec.size() << '\n';
return 0;
}产出如下:
3
3由于字符串和向量都定义了move运算符,所以我的类将合成move构造函数,该构造函数将使移动对象保持空。
发布于 2014-03-02 11:56:23
来自http://msdn.microsoft.com/en-us/en-en/library/hh567368.aspx
"Rvalue references v3.0“添加了新规则,以便在特定条件下自动生成移动构造函数和移动赋值操作符。但是,由于时间和资源的限制,这在Visual 2013中的VisualC++中没有实现。
https://stackoverflow.com/questions/22127099
复制相似问题