Не секрет, что выражение const T*
при объявления указателя полностью эквивалентно записи T const*
, ибо тут важно только, что const
стоит до знака *
, а порядок его употребления с именем типа Т
роли не играет:
const T* p;
и
T const* p;
объявляют указатель на константный объект, а не константный указатель, то есть значение самого указателя можно менять:
T const* p; ... p = NULL;
Но менять сам объект нельзя:
T const* p; ... p->some_member = 0; // ОШИБКА: error C2166: l-value specifies const object
Но все это была вводная, и сейчас не об этом.
Меня больше интересуют читабельность исходников. Я могу ошибаться, но как мне кажется, что с общечеловеческой точки зрения употребление const
в начале выражения (например, const T* p;
) подразумевает константность всего выражения, и, собственно, не важно, что там на самом деле указатель, и по правилам С++ данный const
значит только константность объекта, а не указателя.
Поэтому запись T const* p;
может читаться несколько иначе, а именно: “тип T, который константный, и на него объявляется указатель”. Читабельность немного лучше.
Конечно, все это вопросы стиля во многом, да и всегда следует в первую очередь соблюдать стиль, уже принятый существующем исходнике, но есть вы только учитесь, или начинаете новый проект и что-то еще, когда можно попробовать что-то новое в стиле, как мне кажется, не стоит отказывать себе в этом опыте.