gpt4 book ai didi

c++ - 在 C++ 中,说一个变量具有右值引用类型有意义吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:45 25 4
gpt4 key购买 nike

我对类似 X&& x = static_cast<X&&>(obj_x); 的思考方式就是这样,尽管有外表,x最终成为一个普通的左值引用。我最近遇到了 this article Scott Meyers 坚持认为 x将是右值引用类型的左值。这是真的有意义,还是没有区别的区别?具体来说,给定

X&& x = static_cast<X&&>(obj_x)

X& x = obj_x;

对于 x 的这两个定义,是否有任何后续代码的行为会有所不同? ?

最佳答案

重要的区别在于 R 值引用是命名的还是未命名的(返回值)。

因此,要回答所写的问题,不,没有后续代码会以不同方式对待 x 的两个定义(除了 cpplearner 提到的 decltype()) .只有 x 的定义对引用可以绑定(bind)到(有助于网络搜索的奇特术语)有影响。

任何有名字的东西都可以被再次引用,所以为了绑定(bind)到后续引用,它被当作左值对待。为什么?因为 r 值引用的主要原因是使某些东西能够被移动。在你离开它之后,它就不再可行了。您所能做的就是销毁它或分配给它。如果这个东西没有名字没什么大不了的,但是如果它有名字,很容易不小心再次使用它。这就是为什么你需要调用 std::move(mything) 来摆脱神话[除了某些返回情况]。

我认为是 Herb Sutter 的一篇文章让我得到了这个细节,不幸的是我现在找不到它。如果我记错了,可能是 Stephan T Lavavej 写的。

关于c++ - 在 C++ 中,说一个变量具有右值引用类型有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38408063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com