我有,我想节省一些打字,让编译器生成的移动构造函数和赋值操作符一个简单的数据类:默认的移动构造函数行为属性
class A
{
public:
A(int x, std::string&& y) : x_(x), y_(std::move(y)) {}
A(A && a) = default;
A& operator= (A && a) = default;
private:
int x_;
std::string y_;
};
假设我的编译器是100%的C++ 11兼容,它将与std::string y_
属性做正确的事情吗?它会将移动语义应用于它吗?
如果你的编译器符合C++标准,那么它会做标准所要求的。所以一般你不应该担心你的编译器做了什么;只要遵循语言规则。 –
(请注意,你的类现在有一个删除的拷贝构造函数([demo](http://ideone.com/02sbMw))。最好不要声明任何明确的隐式定义已经提供你需要的东西。) –
你为什么认为它不会? 'std :: string'是可移动的。 – NathanOliver