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