Мы знаем, что "константная переменная" указывает, что после назначения вы не можете изменить переменную, например:
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
Weird. Мы знаем, что как только ссылка привязана к имени/переменной, мы не можем изменить это связывание, мы меняем связанный объект. Поэтому я предполагаю, что тип ri
должен быть таким же, как i
: когда i
является int const
, почему ri
not const
?