Для початку ви, мабуть, знаєте, що 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
застосовується до того, що знаходиться ліворуч від ключового слова (за замовчуванням?), Я думаю, вони вважали, що немає ніякого шкоди в додаванні "ярликів", щоб застосовувати ключові слова та класифікатори іншими способами, щонайменше, до тих пір, поки декларація не зміниться на розбір * або & ...
Так було і в С, тоді я припускаю?
const
після типу, наприклад,#define MAKE_CONST(T) T const
замість того,#define MAKE_CONST(T) const T
щобMAKE_CONST(int *)
правильно розгорнутись на,int * const
а неconst int *
.