Как использовать const с auto?
Есть вот такой код для примера:
typedef int* iter;
typedef const int* c_iter;
int arr[]{1, 2, 3, 4};
iter arrbegin()
{ return arr; }
int main()
{
const auto it = arrbegin();
it++;
return 0;
}
И он выбивает ошибку (изменение константных данных) но я немного в замешательстве. Насколько я понимаю данный код эквивалентен этому:
const iter it = arrbegin ();
Но разве const iter не эквивалентен iter_const? Опытным путем я уже понял, что нет, но мне не понятно: почему нет?
Ответы (1 шт):
Когда вы добавляете const к typedef-у, он добавляется не слева (и не справа), а на верхний уровень.
Это становится понятнее, если расписать словами значения типов:
typedef int* iter; - "iter - это указатель на int".
const iter - "константный iter", т.е. "константный указатель на int".
А "константный указатель на int" - это int *const, поэтому как раз такой тип вы и получаете. (В противоположность const int * - указателю на константный int.)