Para começar, você provavelmente sabe que const
pode ser usado para tornar os dados de um objeto ou um ponteiro não modificáveis ou ambos.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
No entanto, você também pode usar a sintaxe:
Object const *obj; // same as const Object* obj;
A única coisa que parece importar é de que lado do asterisco você colocou a const
palavra - chave. Pessoalmente, prefiro colocar const
à esquerda do tipo para especificar que os dados não são modificáveis, pois acho que eles são melhores na minha mentalidade da esquerda para a direita, mas qual sintaxe veio primeiro?
Mais importante ainda, por que existem duas maneiras corretas de especificar const
dados e em que situação você preferiria ou precisaria uma sobre a outra, se houver?
Editar:
Parece que essa foi uma decisão arbitrária quando o padrão de como os compiladores deveriam interpretar as coisas foi elaborado muito antes de eu nascer. Como const
é aplicado ao que fica à esquerda da palavra-chave (por padrão?), Acho que eles descobriram que não havia mal em adicionar "atalhos" para aplicar palavras-chave e digitar qualificadores de outras maneiras pelo menos até que a declaração seja alterada por analisando um * ou & ...
Este foi o caso em C também, então eu estou assumindo?
const
após o tipo, por exemplo, em#define MAKE_CONST(T) T const
vez de,#define MAKE_CONST(T) const T
paraMAKE_CONST(int *)
expandir corretamente para emint * const
vez deconst int *
.