我有,我想節省一些打字,讓編譯器生成的移動構造函數和賦值操作符一個簡單的數據類:默認的移動構造函數行爲屬性
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