`const auto&` 和 `auto` 捕获 return 值的区别

Difference between capturing return value by `const auto&` and `auto`

我见过像 const auto& now = time(nullptr);

这样的代码

我认为 time 分配右值 return 的目的是延长 return 值的生命周期,如 GotW post 中所述。但是为什么不用const auto now = time(nullptr)呢?

为什么我们要在这里延长 return 值的生命周期?有什么性能差异吗?

在所示示例中,没有理由使用引用。片段的行为无论有没有它都是相同的。

一般来说,使用引用以避免产生不必要的副本是个好主意,因此养成使用引用的习惯并没有什么害处,即使在某些情况下它没有什么不同。

不过我建议在东边写 const。这只是一种偏好,绝对不会改变代码的含义,但更加一致。我会写成:

auto const & now = time(nullptr);