const 引用如何绑定到右值

Posted

技术标签:

【中文标题】const 引用如何绑定到右值【英文标题】:How const reference bound to rvalue 【发布时间】:2015-12-23 12:18:44 【问题描述】:

我看过很多关于将 const 引用绑定到右值的常见问题解答帖子。 有人说是因为系统生成了一个临时对象来绑定到引用,有人说这只是一个抽象的系统规则,它可能并没有真正做到这一点。那么我应该跟随哪一方呢?有人可以解释一下将 const 引用绑定到右值的真实机制,或者只是简单地给我找一个相关的并确认准确的链接。非常感谢!

【问题讨论】:

重点是,这就是语言所说的它必须工作的方式。在不同的情况下,“幕后”发生的事情会有所不同,即使是同一个编译器也是如此。关键是,你不应该关心。您可以随时检查生成的程序集,但这很痛苦。 @BoBTFish 哦,这意味着你支持第二点,对吧?但是根据他们解释的方式,一些高级代表似乎对第一点非常肯定.. 好吧,pretty much everything you know about C++ is "just an abstract system rule"。 感谢您的努力和链接! 【参考方案1】:

两者都是正确的。您必须了解 C++ 是一种抽象。您的计算机执行的代码看起来一点也不像。

当您将一个临时值绑定到一个 const 引用时,您可以想象各种 C++ 机制来表示您的编译器是如何实现该功能的。或者您可以接受它确实 使这项工作,并且您的编译器是一个黑匣子,您不需要对其内部进行推理。出于所有意图和目的,两者无法区分。这就是构建模型的全部意义所在。

如果您真的、真的、真的想知道您的特定编译器在特定情况下是如何实现特定代码的,那么您必须成为该编译器源代码方面的专家。这是一个非常高级的话题,通常世界上只有少数人了解编译器在内部做什么。成为其中一员通常不值得花费时间和投资。1

1 虽然我相信他们会非常感谢您的额外帮助!毕竟,他们最终需要“传递火炬”。

【讨论】:

感谢您的努力。那我就按照你的想法去做:-) @Des1gnWizard:哪一个? ;)

以上是关于const 引用如何绑定到右值的主要内容,如果未能解决你的问题,请参考以下文章

左值绑定到右值引用

左值绑定到右值引用

std::forward vs std::move 同时将左值绑定到右值引用

error C2662 无法将左值绑定到右值 —— 变量永远是左值,即使它的类型为右值引用

VS2012 error C2664: “std::make_pair”:无法将左值绑定到右值引用

错误:对类型为'const ItemInstance'的引用无法绑定到类型为'void'的右值