将 return 值存储为 const 引用而不是值

Storing return value as a const reference versus as a value

假设函数具有签名

std::string GetString();

并且它 returns 一个新的字符串值。现在给出以下代码:

// (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();

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

Am I correct to understand that (a) and (b) are, from a C++11 compiler's point of view, identical?

不,它们不相同。

(a) 延长 return 由 GetString() 编辑的临时对象的寿命。

(b) 创建一个新对象。它由以下人员构成:

  1. 使用GetString()的return值作为参数调用std::string的复制构造函数,
  2. 被 RTO 分配 GetString() 的 return 值,或
  3. 使用 GetString() 的 return 值调用移动构造函数。

理论上它们是不同的,但实际上它们是相同的。您可以编写的唯一代码来区分 decltype(my_string).

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