Это может поразить ваш разум, но ссылка никогда не будет изменяемой (нельзя сделать ссылку на другой объект), а указанное значение всегда будет изменяемым (если у вас нет ссылки на const):
#include <iostream>
struct A
{
int& i;
A(int& n): i(n) {}
void inc() const
{
++i;
}
};
int main()
{
int n = 0;
const A a(n);
a.inc();
std::cout << n << '\n';
}
Метод const означает, что к членам добавлен const-квалификатор верхнего уровня. Для ссылки это ничего не делает (= int & const a;
), для указателя он делает указатель, а не pointee const (= int* const p
, не const int* p;
).