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, который константный, и на него объявляется указатель. Читабельность немного лучше.Конечно, все это вопросы стиля во многом, да и всегда следует в первую очередь соблюдать стиль, уже принятый существующем исходнике, но есть вы только учитесь, или начинаете новый проект и что-то еще, когда можно попробовать что-то новое в стиле, как мне кажется, не стоит отказывать себе в этом опыте.
 
 
 
 
 Сообщения
Сообщения
 
 
а мне кажется, что лучше читать справа налево
ОтветитьУдалитьнапример
int const * - указатель на константный int
char * const - константный указатель на char
int * const - константный указатель на int
Разумно. Тогда и:
ОтветитьУдалитьconst int * - можно прочесть как "указатель на int константный", что весьма понятно
Получается неплохое правило для чтения объявления указателей - "прочитай его справо налево" и все будет ясно.
Жаль, что нотация нашего родного языка по умолчанию использует направление слево направо.
Указатели евреи придумали. Поэтому справа налево
ОтветитьУдалитьЯ как-то об этом не думал.
ОтветитьУдалить