对分配给返回 const ref

问题描述

const className& f();

如果我有一个返回 const ref 的函数。并使用它的值使用 auto

分配给变量
auto v1 = f();
auto& v2 = f();
const auto& v3 = f();
decltype(auto) v4 = f();

据我所知,这三个选项都是一样的。但是我是否应该仍然更喜欢像 v3 这样在我的代码中明确表示它是 const ref ?或者也许现在在 C++14/C++17/C++20 中还有其他一些更可取的方式?

还是我错了,它们实际上是不同的? 更新:看来我错了。只有 decltype(auto) 和 const auto& 会生成变量 const ref?

解决方法

如果我有一个返回 const ref 的函数。并利用它的价值 使用 auto

分配给变量

我相信您打算使用函数 f 初始化变量:

auto        v1 = f();
auto&       v2 = f();
const auto& v3 = f();

据我所知,这三个选项都是一样的。

不,它们不一样

static_assert(std::is_same_v<decltype(v1),className>);
// plain auto does not deduce reference or apply const
static_assert(std::is_same_v<decltype(v2),const className&>);
// v2 will also be const& as function returns const&
static_assert(std::is_same_v<decltype(v3),const className&>);