私はこの非常に単純なテストコードを持っています:
std::string a = "A"
std::string b = "B"
std::cout << a + b << std::endl;
GNU g ++で動作しますがa + b、std::coutstd::cout は正しいメモリを受け取ることが保証されていますか?
どうもありがとう!
安全です。によって処理されるまで、テンポラリは破棄されませんcout。
はい -に渡されるa+b一時オブジェクトを作成します。それが作成された完全な式の終わりに、その一時オブジェクトは破棄されますが、その前ではないため、式の終わりまで有効なままです。std::stringstd::cout
それ以外は、一時オブジェクトは他のほとんどのオブジェクトとほとんど同じstd::stringであるため、それが一時オブジェクトであるという事実は、 による処理方法とは無関係std::coutです。