C++ c++&引用;康斯特;常数;第二个常量是什么意思?

C++ c++&引用;康斯特;常数;第二个常量是什么意思?,c++,reference,constants,C++,Reference,Constants,请你解释一下下面表达式中第二个“const”的含义: int i = 42; const int &const ri = i; 是否存在强制执行常数T和常数的情况 到目前为止,我所理解的是: 指针是对象,可以重新分配它们 int i = 42; const int *ptr1 = &i; // valid: (low-level const): *ptr1 cannot be changed. int *const ptr2 = &i; //

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

int i = 42;
const int &const ri = i;
是否存在强制执行常数T和常数的情况

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

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).
引用、未链接指针不是对象(它们没有地址),不能重新分配==>对于“高级常量”没有意义


格式
int&const
格式错误(C++11§8.3.2):

在声明T D中,其中D具有以下任一形式

& attribute-specifier-seqopt D1  
&& attribute-specifier-seqopt D1
声明td1中标识符的类型为“派生声明器类型列表T”,则D标识符的类型为“派生声明器类型列表引用到T”。可选属性说明符seq与引用类型相关Cv限定引用的格式不正确,除非Cv限定符是通过使用typedef(7.1.3)或模板类型参数(14.3)引入的,在这种情况下,Cv限定符 都被忽略了


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

这不/不应该编译AFAIK.Ok。它使用Visual Studio Express 2013(我不知道默认情况下使用的是什么编译器,但它已编译),所以我认为它是正确的,我想了解它的用途。@user3019338:它应该给您一个警告()-如果您没有看到,确保将警告设置调高。旁注:任何前导的“const T”实际上都是“T const”
& attribute-specifier-seqopt D1  
&& attribute-specifier-seqopt D1