有人可以確認出來的函數的字符串是否會被移入成員變量或不是?我可以在函數的結果上使用std :: move來構造一個新的對象嗎?
class Foo {
private:
const std::string m_complex_str;
std::string create_complex_str() {
return std::string("some huge string");
}
public:
Foo() : m_complex_str(std::move(create_complex_str())) { }
};
這是正確的做法嗎?
也許大多數編譯器會爲我做這個沒有移動功能?
是的,它會自動移動,'移動'是不必要的。 – 2013-02-11 01:06:56
@SethCarnegie即使「一些巨大的字符串」周圍沒有std :: string()? – user2015453 2013-02-11 01:08:21
是的,因爲'create_complex_str'通過值返回,並且該值是一個xvalue,它在您構造'm_complex_str'的點上。另外,在那裏使用'move'可能會阻止一個名爲RVO的編譯器優化,所以'move'不僅是不必要的,而且是有害的。 – 2013-02-11 01:08:33