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