可能是一個蹩腳的問題,但我一直未能找到全面的答案。將它們用作emplace_back的參數後使用變量是否正確?
std::vector::emplace_back
的參數是r值參考。據我所知,在通過r值引用傳入某個地方後使用object是不安全的。我的意思是:
std::string str("hello world");
std::string str2(std::move(str)); // string::string(string &&);
cout << str; // unsafe, str was moved to str2
那麼,下面的例子會發生什麼?
std::vector<std::string> array;
std::string str("hello world"); // what if add 'const' qualifier here?
array.emplace_back(str); // template <class... Args>
// void emplace_back (Args&&... args);
std::cout << str; // safe or not? str was moved or copied?
我真的很困惑。我的測試表明,str
在emplace_back
之後可以安全使用,但是我的(壞的?)邏輯告訴我str
已被移動,之後不應使用。
PS。對不起我的英文:)
我想說明的是,'emplace_back'是一個'委託構造函數',所以你不需要發送它的類型,你可以發送任何參數給對象構造函數,矢量'例如你可以'emplace_back(7,'c')'。如果你已經有了這個類型的變量,'push_back()'更具慣用性。 –
sp2danny
請參閱http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back – sp2danny