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

Passing a temporary object to std::cout

本文关键字:std cout 临时对象      更新时间:2023-10-16

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

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如何处理它无关。