我正在阅读一些已经使用了很长时间没有问题的代码,下面我有一个简化版本:
void SomeClass::someMethod(const std::string& arg1, const std::string& arg2) {
// unrelated code
const std::string& var = arg1 + arg2;
// var used in other concatenations
// var used to index a map
}
我会假设var
使用起来不安全,因为它引用了一个临时的。这里临时的生命周期太短,还是活到方法结束?
答案 0 :(得分:14)
const std::string& var = arg1 + arg2;
此处,临时的生命周期延长至var
的生命周期。这意味着,一般来说,代码是安全的。
每当引用绑定到临时对象或子对象时 其中,临时的寿命延长以匹配 参考的生命周期,......
答案 1 :(得分:5)
这里临时的生命周期太短还是直到方法结束?
只要引用存活,临时就会存活。换句话说,使用引用是安全的。