私は主にCとJavaのバックグラウンドからC++を学習しています。オブジェクトをコピーせずにC++でオブジェクトを返す最良の方法は何かが不思議です。私の理解から、C++ 11は、(コピーに反対する)一時変数からデータを移動するために、rvalue参照(& &)を導入しました。例:C++でオブジェクトを返す
std::string getStr(){
return "Hello";
}
std::string &&hello = getStr();
別の方法として、共有ポインタを使用することが考えられます。
std::tr1::shared_ptr<std::string> getStr(){
std::tr1::shared_ptr<std::string> hello(new std::string("Hello"));
return hello;
}
auto hello = getStr();
私は多分基準値の参照が良いと思っていますが、私はそれを使用する前に第二の意見を最初にしたいと思います。どちらが良いですか?
また、コンストラクタを使用して設定されない場合、クラス内のフィールドは右辺値参照にすることをお勧めしますか?例:
class StringHolder{
public:
std::string &&str;
};
StringHolder sh;
sh.str = getStr();
皆さんありがとう!
有用な参考書の紹介(http://www.artima.com/cppsource/rvalue.html) –
現代の標準ライブラリの実装では、小さな文字列の最適化が使用されるため、文字列 "Hello"は値で返すよりも遅くなる可能性があります。 – bames53