C++11 移動構造函數問題?
01-05
vs2013 Community,一個簡單的構造函數問題:
f2的構造是調用移動構造函數,那將s賦給data的時候,應該調用的是string的移動賦值函數,但是我右鍵查看定義,卻調用的是string的拷貝構造函數:求大神解答。。這是為什麼。。感激不盡。
Foo(string s) : data(std::move(s)) { ... }
const 是左值,另外右值引用杠在參數上的時候也是左值。
需要用move強轉
你還是沒有理解右值是個什麼東西Foo(std::string s)的意思是外面傳進來的實參,是一個右值,但在Foo(std::string s)函數內部,s本身是具名的,則是左值,所以在data = s的時候,調用的是std::string的拷貝構造,這時候應該調用std::move(s),強制把s轉成右值。
右鍵查看定義 是什麼鬼
data = s的時候,這裡s不是右值。所以沒有調用string的move構造函數。
class Foo{public: Foo() {}
Foo(string s) : data(std::move(s)) {}
// 這樣就行了不用寫兩個}推薦閱讀:
※常量字元串是右值,為什麼沒有調用相應的右值重載函數?
※你有什麼關於Linux下C++並行編程的好書和經驗跟大家分享?
※為什麼 C++ 中,基類指針可以指向派生類對象?
※在取消同步的情況下,為什麼cin的速度比scanf快?