串联的std :: string引用是否安全?

时间:2018-01-25 19:00:05

标签: c++

我正在阅读一些已经使用了很长时间没有问题的代码,下面我有一个简化版本:

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使用起来不安全,因为它引用了一个临时的。这里临时的生命周期太短,还是活到方法结束?

2 个答案:

答案 0 :(得分:14)

const std::string& var = arg1 + arg2;

此处,临时的生命周期延长至var的生命周期。这意味着,一般来说,代码是安全的。

来自lifetime of a temporary

  

每当引用绑定到临时对象或子对象时   其中,临时的寿命延长以匹配   参考的生命周期,......

答案 1 :(得分:5)

  

这里临时的生命周期太短还是直到方法结束?

只要引用存活,临时就会存活。换句话说,使用引用是安全的。