My favorites | Sign in
Project Home Downloads Wiki Source
Search
for
ConstPointerDeclaration  
const T* или T const*
Featured
Updated Sep 30, 2009 by ade...@gmail.com

const T* или T const*

Не секрет, что выражение "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, который константный, и на него объявляется указатель. Читабельность немного лучше.

Конечно, все это вопросы стиля во многом, да и всегда следует в первую очередь соблюдать стиль, уже принятый существующем исходнике, но есть вы только учитесь, или начинаете новый проект и что-то еще, когда можно попробовать что-то новое в стиле, как мне кажется, не стоит отказывать себе в этом опыте.


Sign in to add a comment
Powered by Google Project Hosting