標籤:

C++11 移動構造函數問題?

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快?

TAG:編程語言 | C |