私は単純なクラスがあります:私は最近、右辺値について少し読んだ、と私は右辺値を使用してX
のコンストラクタを書く必要がある場合、私は、思ってきたので、私は一時的に検出しますことができるだろうstd :: stringのrvaluesを使ってコンストラクタを書くべきでしょうか?
class X
{
std::string S;
X (const std::string& s) : S(s) { }
};
をstd::string
タイプのオブジェクト?使用可能な場合、コンストラクタを移動する私の知識、それを使用する必要がありますC++ 11を支持コンパイラでのstd ::文字列の実装については
X (std::string&& s) : S(s) { }
です:
は、私はそれがようになるはずだと思います。
[関連](http://stackoverflow.com/questions/7592630/is-pass-by-value-a-reasonable-default-in-c11)。 –
引用符で囲まれたコードは、呼び出し側が 'X()'にrvalueを渡す必要があることを制約しますが、 'S'のコンストラクタにrvaluenessを渡すことができません。したがって移動することはできず、コピーする必要があります。したがって、関数のユーザーに負担をかける一方で、代償として利益を得られないようにします。 –
@underscore_d私は5年後、私のコードが完璧ではないという答えで合意に達したと思う;) –