将临时对象传递给std :: cout

时间:2012-12-27 03:34:36

标签: c++ temporary

我有一个非常简单的测试代码:

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

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

虽然它在GNU g ++中有效,但我担心它是否可移植以将临时a + b传递给std::cout,因为在std :: cout中保证接收正确的内存?

非常感谢!

2 个答案:

答案 0 :(得分:5)

这很安全。临时不会被cout处理后销毁。

有关详细信息,请参阅When are temporaries created as part of a function call destroyed?

答案 1 :(得分:2)

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

除此之外,临时与几乎任何其他std::string对象几乎相同,因此它是临时对象的事实与std::cout处理它的方式无关。