Почему const int & k = i; ++i; ' возможный?

Я должен определить, является ли эта функция синтаксически правильной:

int f3(int i, int j) { const int& k=i; ++i; return k; }

Я проверил это, и он компилируется с моей основной функцией.

Я не понимаю, почему это так.

Конечно, вызывая функцию f3 я создаю копии переменных i и j в новом пространстве памяти и устанавливаю const int& k=i Я устанавливаю пространство памяти вновь созданного k точно таким же пространством пространства памяти скопировано i, поэтому любое изменение, то есть приращение ++i приведет к ++k, который не является возможным при условии, что он был установлен const

Любая помощь с благодарностью

Ответ 1

приращение ++i приведет к ++k, который не является возможным при условии, что он был установлен const

Это недоразумение.

Вы не можете изменить значение объекта с помощью k но его можно изменить другими способами. Другими словами, ++k не разрешен, но ++i все еще разрешен, что косвенно изменит значение k.

Вот аналогия с non- компьютерным миром.

Вы можете посмотреть в окно магазина и посмотреть, что внутри, но вы не сможете изменить то, что внутри магазина. Тем не менее, сотрудник, который находится внутри магазина, может изменить содержимое магазина. Вы увидите это изменение снаружи. У вас есть const доступ или доступ на просмотр в магазине в то время как работник non- const доступ или доступ изменения в хранилище.