1

我有这段非常简单的测试代码:

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

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

虽然它在 GNU g++ 中工作,但我担心将临时传递给 是否是可移植的a + bstd::cout例如,std::cout 是否保证接收正确的内存?

非常感谢!

4

2 回答 2

5

它是安全的。临时文件在被 处理之前不会被销毁cout

有关更多详细信息,请参阅作为函数调用的一部分创建的临时对象何时被销毁?

于 2012-12-27T03:37:26.410 回答
2

是——a+b创建一个临时std::string对象,该对象被传递给std::cout. 在创建它的完整表达式结束时,该临时对象将被销毁,但之前不会,因此它将保持有效直到表达式结束。

除此之外,临时对象与几乎任何其他std::string对象几乎相同,因此它是临时对象这一事实与std::cout.

于 2012-12-27T03:39:01.233 回答