Na początek prawdopodobnie wiesz, że constmoż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 constsłowo kluczowe. Osobiście wolę umieścić constpo 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 constdanych 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ż constjest 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?
constpo typie, np.#define MAKE_CONST(T) T constZamiast#define MAKE_CONST(T) const Ttak,MAKE_CONST(int *)aby poprawnie rozwinął się doint * constzamiastconst int *.