C++ 是X常数&;x==x&;常数x?

C++ 是X常数&;x==x&;常数x?,c++,constants,C++,Constants,我知道X&const X是多余的。这不好!但是我想知道X常数&X和X常数&X之间的区别是什么? 第一个表达式是否表示x是对常数类x的引用 引用本身总是恒定的。初始化后,不能将引用更改为引用其他内容 是的,第一个表达式表示引用是引用一个常量。X常量&X是引用一个const X,而X&const X是非法的。没有所谓的const引用,因为引用从一开始就不是可变的。从右到左阅读:X&const X-X是对类型为X的对象的常量引用,它没有意义,引用根据定义是常量X const&X-X是对X类型常数的引用

我知道
X&const X
是多余的。这不好!但是我想知道
X常数&X
X常数&X
之间的区别是什么?
第一个表达式是否表示x是对常数
类x
的引用

引用本身总是恒定的。初始化后,不能将引用更改为引用其他内容


是的,第一个表达式表示引用是引用一个常量。

X常量&X
是引用一个
const X
,而
X&const X
是非法的。没有所谓的
const
引用,因为引用从一开始就不是
可变的

从右到左阅读:
X&const X
-X是对类型为X的对象的常量引用,它没有意义,引用根据定义是常量
X const&X
-X是对X类型常数的引用。

X const&
如果是对不允许通过引用修改的
X
的引用。您可以将其视为只读视图。引用类型中不反映
X
本身是否为
const
。请注意,您可以使用
const
和非
const
对象初始化
X const&

X a;
X const b;
X const& r = a;   // read-only-view on non-const X
X const& s = b;   // read-only-view on const X
重要的一点是,您不能通过引用更改
X
,但可以直接更改
a
,并且该更改将通过
r
反映出来


标准禁止
X&const
,因为引用本身无论如何都不能修改。

为什么
X&const X
是多余的?为什么不好?@VJo因为标准上这么说。除非它说没问题。(例如,如果由于
typedef
或模板扩展而插入了
const
),那么合法的东西怎么可能等同于非法的东西呢?:)好的,我现在明白了。这个问题是以一种奇怪的方式来表述的。讽刺的是,把“可变”放在 Butkks中可以被看作是对那个名字的非常真实的C++关键字的引用,它允许一个。并不是说这些都会使“持续引用”变得更有意义或合法(据我所知,就是这样)。@delnan:我添加了反勾号作为一种习惯,因为
mutable
确实是一个关键字。我应该删除它们以避免混淆吗?好吧,这可能会让一两个读者感到惊奇,但我只是添加了我的评论,因为我觉得讽刺很有趣。@delnan:那我们就用讽刺吧,它值得一秒钟的惊奇。