当前位置:  开发笔记 > 编程语言 > 正文

为什么删除了as_const的const &&重载?

如何解决《为什么删除了as_const的const&&重载?》经验,为你挑选了1个好方法。

在关于C++ 17进展的博客上,我阅读了以下内容:

P0007提出一个辅助函数模板as_const,它只需要一个引用并将其作为引用返回const.

template  std::add_const_t& as_const(T& t) { return t }
template  void as_const(T const&&) = delete;

为什么const&&删除了重载?



1> 小智..:

考虑如果你没有那个重载会发生什么,并尝试传入const右值:

template  const T &as_const(T &t) { return t; }
struct S { };
const S f() { return S{}; }
int main() {
  // auto & ref = as_const(S()); // correctly detected as invalid already
  auto & ref = as_const(f()); // accepted
}

这将被接受,因为T它将被推断为const S,并且临时工可以绑定const S &.结果是你不小心得到一个临时的左值引用,它将ref在初始化后立即销毁.几乎所有采用左值(无论是变量还是函数参数)的用户都不希望传递临时值; 默默地接受临时的意味着你很容易默默地获得悬挂的参考.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有