Да, это постоянный указатель на константу T
. То есть вы не можете ни изменить указатель, ни то, на что он указывает.
const T*
только запрещает вам изменять что-либо, на что указывает указатель, но позволяет вам (в пределах языка) проверять значение в *(foo+1)
и *(foo-1)
. Используйте эту форму, когда вы передаете указатели на неизменяемые массивы (такие как строка C, которую вы только должны читать).
T * const
означает, что вы можете изменить значение T
, на которое указывает foo
, но вы не можете изменить сам указатель; поэтому вы не можете сказать foo++; (*foo)++
, потому что первый оператор будет увеличивать (изменять) указатель.
T *
даст вам полную свободу: вы получаете указатель на массив и можете проверять и изменять любой член этого массива.