Na początek prawdopodobnie wiesz, że const
można to wykorzystać do uczynienia danych obiektu lub wskaźnika niemodyfikowalnymi lub obu.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Możesz jednak również użyć składni:
Object const *obj; // same as const Object* obj;
Jedyne, co wydaje się mieć znaczenie, to po której stronie gwiazdki umieścisz const
słowo kluczowe. Osobiście wolę umieścić const
po lewej stronie typu, aby określić, że dane nie są modyfikowalne, ponieważ uważam, że lepiej czyta się w moim nastawieniu od lewej do prawej, ale która składnia była pierwsza?
Co ważniejsze, dlaczego istnieją dwa prawidłowe sposoby określania const
danych i w jakiej sytuacji wolałbyś lub potrzebowałbyś jednego nad drugim, jeśli w ogóle?
Edytować:
Wygląda więc na to, że była to arbitralna decyzja, kiedy standard dotyczący tego, jak kompilatorzy powinni interpretować rzeczy, został opracowany na długo przed moim urodzeniem. Ponieważ const
jest stosowane do tego, co znajduje się po lewej stronie słowa kluczowego (domyślnie?), Domyślam się, że nie było nic złego w dodaniu „skrótów” do stosowania słów kluczowych i kwalifikatorów typów w inny sposób, przynajmniej do czasu, gdy deklaracja zmieni się o analizowanie * lub & ...
Tak było również w C, więc zakładam?
const
po typie, np.#define MAKE_CONST(T) T const
Zamiast#define MAKE_CONST(T) const T
tak,MAKE_CONST(int *)
aby poprawnie rozwinął się doint * const
zamiastconst int *
.