Для начала вы, вероятно, знаете, что с const
его помощью можно сделать либо данные объекта, либо указатель неизменяемыми, либо и то, и другое.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Однако вы также можете использовать синтаксис:
Object const *obj; // same as const Object* obj;
Единственное, что кажется важным, - это то, с какой стороны звездочки вы помещаете const
ключевое слово. Лично я предпочитаю ставить const
слева от типа, чтобы указать, что данные не подлежат изменению, поскольку я считаю, что он лучше читается в моем мышлении слева направо, но какой синтаксис появился первым?
Что еще более важно, почему существует два правильных способа указания const
данных и в какой ситуации вы бы предпочли или понадобились бы один другому, если таковой имеется?
Редактировать:
Похоже, это было произвольное решение, когда стандарт того, как компиляторы должны интерпретировать вещи, был разработан задолго до моего рождения. Поскольку const
применяется к тому, что находится слева от ключевого слова (по умолчанию?) Я думаю, они решили, что добавление «ярлыков» для применения ключевых слов и квалификаторов типов другими способами не повредит, по крайней мере, до тех пор, пока объявление не изменится на разбор * или & ...
Полагаю, так было и в C?
const
после типа, например,#define MAKE_CONST(T) T const
вместо,#define MAKE_CONST(T) const T
чтобыMAKE_CONST(int *)
правильно расширить доint * const
вместоconst int *
.