この 2 つの関数を見てみましょう。
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
process_c_string
によって返される引数を使用したの 2 つの可能な呼び出しを次に示しますget_string
。
の返されたオブジェクトへの const 参照をバインドしない場合
get_string
。process_c_string(get_string().c_str());
の返されたオブジェクトへのバインディング const 参照を使用します
get_string
。const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
2番目の方法が有効であることは知っていますが、最初の方法についてはどうですか?この場合について標準は何と言っていますか? によって返された一時オブジェクトは、存在しないため、終了get_string
する前に削除されますか?process_c_str
const reference
注: MSVC ではどちらのバージョンも問題ありません。