将 auto 用于分配给 return const ref 的函数的变量

Using auto to a variable assigned ot a function that return const ref

const className& f();

如果我有一个 return 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?

If I have a function that return const ref. And use it's value to assign to a variable using auto

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

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

As far as I understand all those three option will be same.

不,它们不一样

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&>);