在“The C++ Programming Language (3rd)”p.255:
A temporary can be used as an initializer for a const reference or a named object. For example:
void g(const string&, const string&); void h(string& s1, string& s2) { const string& s = s1+s2; string ss = s1+s2; g(s, ss); // we can use s and ss here }
This is fine. The temporary is destroyed when "its" reference or named object go out of scope.
他是说 s1+s2
创建的临时对象在 ss
超出范围时被销毁吗?
不是一复制初始化到ss
就销毁了吗?
最佳答案
代码中唯一的临时变量是 s1 + s2
。第一个绑定(bind)到 const-ref s
,因此它的生命周期延长到 s
。您的代码中没有其他内容是临时的。特别是,s
和 ss
都不是临时变量,因为它们显然是命名变量。
第二个s1 + s2
当然也是临时的,但它死在了行尾,只用于初始化ss
。
更新:也许有一点值得强调:在最后一行 g(s, ss);
中,重点是 s
是一个完全有效的引用,并且它不是您可能期望的悬空引用,正是因为绑定(bind)到 const-references 的临时对象的生命周期延长规则。
关于c++ - 什么时候临时用作命名对象的初始值设定项被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242267/