Для початку ви, мабуть, знаєте, що 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 *.