const引用如何绑定到右值
How const reference bound to rvalue
我看到了很多关于将const引用绑定到rvalue的常见问题解答帖子。有些人说这是因为系统生成了一个临时对象供引用绑定,还有一些人说这只是一个抽象的系统规则,它可能并没有真正做到这一点。那么我应该站在哪一边呢?有人能解释一下将常量引用绑定到右值的真正机制吗?或者只是简单地给我找一个相关的并确认准确的链接。非常感谢!!
两者都是正确的。你必须明白C++是一种抽象。你的计算机执行的代码看起来一点也不像
当您将临时绑定到常量引用时,您可以想象各种C++机制来表示编译器是如何使其工作的。或者,您可以接受它确实使其工作,并且您的编译器是一个黑盒,您不需要对其内部进行推理。无论出于何种意图和目的,两者都是无法区分的。这就是构建模型的全部意义。
如果你真的,真的,想知道你的特定编译器在某些情况下是如何实现特定代码的,你必须成为编译器源代码的专家。这是一个非常高级的话题,通常世界上只有少数人了解编译器在里面做什么。成为其中一员所需的时间和投资通常是不值得的1
1尽管我相信他们会非常感谢额外的帮助!毕竟,他们最终需要"传递火炬"
Herb Sutter写了一篇关于对右值的const引用的好文章,这里有链接。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 将常量指针引用绑定到非常量指针
- 运行时错误:引用绑定到类型为"int"的空指针
- 了解C++如何返回引用并绑定到引用
- 模板允许左值与右值引用绑定
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 无法将类型"T&"的非常量左值引用绑定到类型"T"的右值 t++ std::atomic<T>
- C++通过绑定到引用成员而缩短临时变量寿命?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 对结构成员的临时绑定引用
- 错误:在类型 "blah blah" 的绑定引用中删除限定符以初始化"some other blah blah"
- 为什么我可以在初始化引用后重新绑定引用?
- 为什么按引用传入会导致绑定引用类型错误
- 返回非常量引用会导致绑定引用错误
- 递归到迭代而不重新绑定引用
- 类型绑定引用中的限定符和 const 类型的初始值设定项中删除
- 为什么C++不允许重新绑定引用?