我有一个非常简单的测试代码:
std::string a = "A"
std::string b = "B"
std::cout << a + b << std::endl;
虽然它在GNU g ++中有效,但我担心它是否可移植以将临时a + b
传递给std::cout
,因为在std :: cout中保证接收正确的内存?
非常感谢!
答案 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
处理它的方式无关。