Как использовать 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 шт):

Автор решения: HolyBlackCat

Когда вы добавляете const к typedef-у, он добавляется не слева (и не справа), а на верхний уровень.

Это становится понятнее, если расписать словами значения типов:

typedef int* iter; - "iter - это указатель на int".

const iter - "константный iter", т.е. "константный указатель на int".

А "константный указатель на int" - это int *const, поэтому как раз такой тип вы и получаете. (В противоположность const int * - указателю на константный int.)

→ Ссылка