C++ 另一个c++;暂时的终身困惑
在下面的代码段中。。。将对C++ 另一个c++;暂时的终身困惑,c++,C++,在下面的代码段中。。。将对Quote::toXML返回的临时字符串的引用存储在toXML::s\ucode>成员变量中是否安全,至少只要它与一起使用就安全 从[class.temp]: 有两种情况下,时间单位在完全表达结束时的不同点被销毁。[……] 第二个上下文是引用绑定到临时对象时。117引用所绑定到的临时对象 绑定的或作为引用绑定到的子对象的完整对象的临时对象将持续存在 在引用有效期内,除了: -在函数调用(5.2.2)中绑定到引用参数的临时对象将一直持续到完成 包含调用的完整表达式的 我们
Quote::toXML
返回的临时字符串的引用存储在toXML::s\ucode>成员变量中是否安全,至少只要它与一起使用就安全
从[class.temp]:
有两种情况下,时间单位在完全表达结束时的不同点被销毁。[……]
第二个上下文是引用绑定到临时对象时。117引用所绑定到的临时对象
绑定的或作为引用绑定到的子对象的完整对象的临时对象将持续存在
在引用有效期内,除了:
-在函数调用(5.2.2)中绑定到引用参数的临时对象将一直持续到完成
包含调用的完整表达式的
我们就在那一点上。临时对象绑定到一个引用参数(s
),并一直保持到包含调用的完整表达式完成为止。也就是说,它一直持续到
std::cout << ToXML("quote", q.toXML()) << std::endl;
// --- here ---------------------------------------^
您被挂起的引用卡住了,所以我会谨慎地使用此模式。查看:根据这些信息,由于您的函数采用常量引用,因此看起来没有问题。
std::cout << ToXML("quote", q.toXML()) << std::endl;
// --- here ---------------------------------------^
ToXML x("quote", q.toXML());