是否有傳遞構造函數參數的首選方法?特別是如果這些構造函數參數用於初始化成員變量。構造函數傳遞的首選參數
一個簡化的例子。
class Example
{
public:
Example(/*type-1*/ str, /*type-2*/ v):
m_str(str),
m_v(v)
{ }
/* other methods */
private:
std::string m_str;
std::complex<float> m_v;
};
選項爲:
- 通過噪聲值,然後
std::move
對象進入構件。 const&
,然後將參數複製到成員中。&&
,然後用該參數初始化該成員。
什麼應該是我的默認/首選參數傳遞樣式?
它是否因不同的參數類型而改變?
我的直覺說使用右值引用,但我不知道我明白所有的優點和缺點。
「&&,然後使用參數」'示例(std :: string && str):m_str(str){}'初始化成員將複製一次。只是爲了說清楚。 –
@ R.MartinhoFernandes:編譯器不會使用'std :: string'的移動構造函數嗎?爲什麼它會喜歡複製而不是移動? 'std :: forward'會解決這個問題嗎? –
因爲指定的右值引用是左值。 '示例(std :: string && str):m_str(std :: move(str)){}'移動。 –