1

私はこの非常に単純なテストコードを持っています:

std::string a = "A"
std::string b = "B"

std::cout << a + b << std::endl;

GNU g ++で動作しますがa + bstd::coutstd::cout は正しいメモリを受け取ることが保証されていますか?

どうもありがとう!

4

2 に答える 2

5

安全です。によって処理されるまで、テンポラリは破棄されませんcout

詳細については、関数呼び出しの一部として作成された一時データが破棄されるのはいつですか? を参照してください。

于 2012-12-27T03:37:26.410 に答える
2

はい -に渡されるa+b一時オブジェクトを作成します。それが作成された完全な式の終わりに、その一時オブジェクトは破棄されますが、その前ではないため、式の終わりまで有効なままです。std::stringstd::cout

それ以外は、一時オブジェクトは他のほとんどのオブジェクトとほとんど同じstd::stringであるため、それが一時オブジェクトであるという事実は、 による処理方法とは無関係std::coutです。

于 2012-12-27T03:39:01.233 に答える