在C++中,说变量具有右值引用是否有意义
In C++, is it meaningful to say that a variable has type rvalue reference?
我对类似X&& x = static_cast<X&&>(obj_x);
的看法是,尽管外观如此,x
最终还是一个普通的左值引用。 我最近看到这篇文章,斯科特·迈耶斯坚持认为x
将是右值引用类型的左值。这真的有意义,还是没有区别的区别? 具体来说,给定
X&& x = static_cast<X&&>(obj_x)
或
X& x = obj_x;
对于这两种x
定义,是否有任何后续代码的行为会有所不同?
重要的区别在于 R 值引用是命名还是未命名(返回值)。
因此,要回答书面问题,不,没有后续代码会以不同的方式对待x的两个定义(除了,正如cpplearner提到的,decltype()
)。只有x的定义对引用可以绑定的内容(有助于网络搜索的花哨术语)很重要。
任何带有名称的东西都可以再次引用,因此它被视为 l 值,以便绑定到后续引用。为什么?因为 r 值引用的主要原因是允许从中移动某些内容。从它移开后,它不再可行。您所能做的就是销毁它或分配它。如果这个东西没有名字也没什么大不了的,但如果它有名字,很容易不小心再次使用它。这就是为什么你需要调用 std::move(mything) 来摆脱神话 [除了某些返回情况]。
我认为是赫伯·萨特(Herb Sutter)的一篇文章让我得到了这个细节,不幸的是我现在找不到它。如果我记错了,可能是斯蒂芬·
相关文章:
- 存储对(可能)临时对象的引用是否合法,只要引用不比对象存活?
- 对静态分配的子类对象进行静态分配的纯虚拟父类引用是否合法?
- 形成对对象的引用是否构成访问?
- C++ 引用是否在需要时隐式转换为值?
- 右值引用是否具有与右值引用相同的开销?
- 返回引用是否也会延长其生存期?
- 返回对局部变量的引用是否正常工作?
- 右值引用是否像右值引用一样工作
- 强制转换为指针引用是否会导致未定义的行为
- C++ 指向类的指针和/或引用是否被认为是"movable"?
- 结构化绑定和转发引用是否混合良好?
- 此常量引用是否保留了其生命?
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- 从 r 值引用限定方法返回 r 值引用是否是一种好的做法?
- 在 C++ 中更改越界指针的取消引用是否安全?
- 本地引用是否由"DetachCurrentThread"清除?
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- 常量右值引用是否允许对编译器进行额外优化?
- 如果参数传递两次,会发生什么情况?一次按值,一次按引用?是否会修改
- 返回强制引用是否安全