Для начала вы, вероятно, знаете, что 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
и в какой ситуации вы бы предпочли или нуждались в одном, а не в другом?
Edit:
Похоже, это было произвольное решение, когда стандарт того, как компиляторы должны интерпретировать вещи, был разработан задолго до моего рождения. Поскольку const
применяется к тому, что находится слева от ключевого слова (по умолчанию?), Я думаю, они решили, что не было никакого вреда в добавлении "горячих клавиш" для применения ключевых слов и определителей типов по крайней мере другими способами до тех пор, пока не изменится объявление путем разбора * или & ...
Так было и в Си, тогда я полагаю?