微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对分配给返回 const ref

如何解决对分配给返回 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&>);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。