c ++“const T& const”第二个const是什么意思?

时间:2013-12-07 16:58:34

标签: c++ reference const

请你在下面的表达式中解释第二个“const”的含义:

int i = 42;
const int &const ri = i;

有些情况下const T& const是强制性的吗?

到目前为止我所理解的: 指针是对象,可以重新分配。

int i = 42;
const int *ptr1 = &i;        // valid: (low-level const): *ptr1 cannot be changed.
int *const ptr2 = &i;        // valid: (high-level const): ptr2 cannot be changed.
const int *const ptr3 = &i:  // also valid (combination of 2 precedent lines).

引用,unliked指针不是对象(它们没有地址),不能重新分配==>没有意义的“高级常数”

int i = 42;
int &ri1 = i;        // valid: ri1 is a new name for i
const int &ri2 = 7;  // valid and const is required
const int &ri3 = i;  // valid, what is the use of const?

const int &const ri4 = i;  // valid, has the second const an importance? 

1 个答案:

答案 0 :(得分:2)

表格int & const格式不正确(C ++11§8.3.2):

  

在声明T D中,其中D具有任何一种形式

& attribute-specifier-seqopt D1  
&& attribute-specifier-seqopt D1
     

并且声明T D1中的标识符的类型是“derived-declarator-type-list T”,然后D的标识符的类型是“T的derived-declarator-type-list reference”。 attribute-specifier-seq属于引用类型。 Cv限定的引用是不正确的,除非通过使用typedef(7.1.3)或模板类型参数(14.3)引入cv限定符,在这种情况下cv-预选赛   被忽略了。

所以不,它不能强制到任何地方。它没有语义。