示例A中使用的移動語義是必需的,哪個結構優越?我應該總是在構造函數中使用std :: move嗎?
實例A:
struct A
{
std::string a;
A(std::string a) : a(std::move(a)){ }
};
例B:
struct B
{
std::string b;
B(const std::string& b) : b(b){ }
};
我不相信這是一個重複的問題。我正在問具體哪個示例從在類構造函數中使用成員初始化的角度來看更加優越。其他問題中列出的例子或答案都沒有涉及成員初始化。
我不喜歡用引用參數調用構造函數,然後複製到成員中。看起來有多個複製操作可能是浪費的。
我想「管」數據到成員儘可能有效,但我不想將rvalues作爲構造函數參數。
如果該值是一個「int」或其他單值基元,則使用「move」或引用(const或其他)是毫無意義的。另外,在這種情況下,我會考慮沒有顯式構造函數的結構,在這裏使用聚合初始化工作得很好。 – ShadowRanger
爲了簡化示例,我使用了'int'。如果它是'std :: string'或者其他更復雜的類,哪個更好? (編輯我的答案,並將'int'更改爲'std :: string') –
[什麼是std :: move(),什麼時候應該使用?](http://stackoverflow.com/questions/3413470/what-is-stdmove-when-should-it-be-used) – chbchb55