私の質問は、C++の一時変数とその落とし穴を避ける最良の方法です。C++の一時変数の寿命
は、我々は次のような何かをする事例があります。SomeFunctionReturningStdString()
は値によってstd::string
を返し
SomeFunctionReturningStdString().c_str();
。このlinkで指定されたソリューションへ
std::string temp = SomeFunctionReturningStdString();
temp.c_str();
..similar:
私たちは、これが未定義の動作をもたらし、この問題を解決するために、2つの案が出ていることが発見しました。
またはSomeFunctionReturningStdString()
を返します。std::string
を代わりに参照してください。このようにして、一時的なオブジェクトは、オブジェクトへの参照を代わりに持つので、私の理解が正しいならば決して作成されません。
両方のソリューションは有効ですか?彼らは両方とも一時変数に関連する落とし穴を避けることができますか?
あなたの例は残念ながらもはや関連性がないという点で単純化されています。はい、そこには一時的なものがありますが、それは 'c_str'呼び出し自体が有効であるように十分長く(完全な式)存在します。返される 'char const *'ポインタは、一時的な文字列と同じ瞬間(最後の ';')で期限切れになります。 – MSalters