将返回值存储为const引用而不是值

时间:2015-11-03 06:11:43

标签: c++ const-reference

假设某个函数具有签名

std::string GetString();

并按值返回一个新字符串。现在给出以下代码:

// (a) Store the return value to a const reference.
const std::string& my_string = GetString();

// (b) Store the return value to a (const) value.
const std::string my_string = GetString();

我是否正确理解(a)和(b)从C ++ 11编译器的角度来看是相同的?如果是这样,对风格的选择是否有一个粗略的共识?

2 个答案:

答案 0 :(得分:1)

  

我是否正确理解(a)和(b)从C ++ 11编译器的角度来看是相同的?

不,他们不一样。

(a)延长GetString()返回的临时对象的生命周期。

(b)制作一个新对象。它由以下构成:

  1. 使用std::string的返回值作为参数调用GetString()的复制构造函数,
  2. 通过RTO或
  3. 分配GetString()的返回值
  4. 使用返回值GetString()
  5. 调用move构造函数

答案 1 :(得分:0)

理论上它们是不同的,但实际上它们是相同的。您可以编写的唯一代码来说明差异将涉及decltype(my_string)

编译器可以为两者生成相同的程序集。