C++ 康斯特;vs T&;康斯特。有什么区别?

C++ 康斯特;vs T&;康斯特。有什么区别?,c++,pointers,reference,constants,C++,Pointers,Reference,Constants,我知道 f(const T& obj) // (1) g(T const& obj) // (2) 相同。(我们不能更改f和g主体中obj的值) 但是什么 h(T & const) // (3) 真的吗 另一个例子: k(T const * const & const obj_p) // (4) 第一常量:不能更改实际对象(*obj_p)的值 第二个常量:您不能更改*(obj\p)的值 第三个常量:?在&后面有常量意味着它绑定到变量名,因此表明初始化后不能使

我知道

f(const T& obj) // (1)
g(T const& obj) // (2)
相同。(我们不能更改
f
g
主体中obj的值)

但是什么

h(T & const) // (3)
真的吗

另一个例子:

k(T const * const & const obj_p) // (4)
第一常量:不能更改实际对象(*obj_p)的值

第二个常量:您不能更改
*
(obj\p)的值


第三个常量:?

&
后面有
常量意味着它绑定到变量名,因此表明初始化后不能使该名称引用其他内容。但无论如何,所有引用都是如此,因此,即使编译器接受使用
&const
,这也是多余的,更清楚的是,第三个示例:

h(T & const) 

第四个例子:

k(T const * const & const obj_p)
,但如果删除最后一个
const
限定符:

k(T const * const & obj_p)
它是一个常量指针(指针地址不能更改),指向作为引用传递的常量T(指向的对象不能更改)


更多信息。

据我所知,这些信息不应编译,请从右到左阅读。而且编译器不允许您编译
t&const
,因为引用本身无法更改,所以引用本身
const
是多余的。关于constness有一个完整的FAQ,它不仅是多余的,而且不是语言语法的一部分。