有什么区别:
const double& pi = 3.14;
和(无符号):
const double pi = 3.14;
它们似乎都具有相同的 L 和 R 值,那么有什么区别呢?
最佳答案
对于您的特定示例,没有区别。
这意味着,无论如何都无法区分它们。
但是,由于第一个将引用绑定(bind)到临时对象,当类型是类类型时,临时对象可以是派生类,例如由函数产生!然后它在范围的末尾正确调用了它的析构函数。 ScopeGuard 实现中使用了这个 el neato 小技巧(参见原版 ScopeGuard article in DDJ,作者 Petru Marginean 和 Andrei Alexandrescu —— Petru 发明了 ScopeGuard,Andrei 在其上做了一个更通用的东西)。
我曾经问过 C++ 语言的创造者 Bjarne Stroustrup,为什么支持你第一个声明中的语法。
他的回答是,主要是要有统一的规则(即不对本地引用做出任何特殊异常(exception),而不是将引用作为形式参数)。我想那时候我们都不熟悉 ScopeGuard。回想起来这很简单,但需要像 Petru 或 Andrei 这样的头脑才能想出这样的东西! :-)
干杯。
关于c++ - C++ const 引用和 const 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927986/