Ничего не происходит под капотом. const
является строго компилируемым объектом времени. компилятор использует только знания const
, чтобы решить, является ли инструкция ошибкой, а не для генерации кода. при этом следующее:
int i = 1;
const int *b = &i;
эквивалентно
int i = 1;
int *b = &i;
в терминах сгенерированного кода. Однако, если вы делаете следующее:
int i = 1;
const int *b = &i;
*b = 1;
компилятор заметит, что b
имеет const
(хотя он ничего не знает о i
) и выдаст ошибку. Однако любой оператор, который не считается ошибкой с добавленным const, будет генерировать один и тот же код с или без const.