c++ - C++ const 引用和 const 之间的区别?

标签 c++ reference constants lvalue rvalue

有什么区别:

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/

相关文章:

javascript - 如何从 iframe 内部引用 div?

c++ - 引用失效保证会自动应用于指针吗?

php - Perl 有类似于 PHP 的 constant() 的东西吗?

具有灵活数组成员的常量结构

c++ - T* 和 T*& C++ 的区别

c++ - C++ 中的空构造函数 :

php - 如何在 PHP 5 中获取数组的引用?

将#define 和 const 变量相乘时出现 C++ 错误

c++ - 关于碰撞检测系统中类结构的建议

c++ - 从 'mapped_type' 没有可行的转换