我们知道,“ const 变量”表示一旦被赋值,就不能更改变量,如下所示:
int const i = 1;
i = 2;
上面的程序将无法编译; gcc 提示有一个错误:
assignment of read-only variable 'i'
没问题,我能理解,但下面的例子超出了我的理解范围:
#include<iostream>
using namespace std;
int main()
{
boolalpha(cout);
int const i = 1;
cout << is_const<decltype(i)>::value << endl;
int const &ri = i;
cout << is_const<decltype(ri)>::value << endl;
return 0;
}
它输出
true
false
真奇怪。我们知道,一旦一个引用绑定到一个名称/变量,我们就不能更改这个绑定,我们只能更改它的绑定对象。所以我认为 ri
的类型应该和 i
相同: 当 i
是 int const
时,为什么 ri
不是 const
?