Por que os membros const devem ser inicializados no inicializador do construtor e não em seu corpo?

Por que os membros da class devem ser declarados como const inicializados na lista de inicializadores do construtor, e não no corpo do construtor?

Qual é a diferença entre os dois?

Em C ++, um object é considerado totalmente inicializado quando a execução entra no corpo do construtor.

Você disse:

“Eu queria saber por que const deve ser inicializado na lista de inicializadores de construtor e não em seu corpo?”

O que você está perdendo é que a boot acontece na lista de boot, e a atribuição acontece no corpo do construtor. Os passos da lógica:

1) Um object const só pode ser inicializado.

2) Um object tem todos os seus membros inicializados na lista de boot. Mesmo que você não os inicialize explicitamente, o compilador terá prazer em fazer isso por você 🙂

3) Portanto, colocando 1) e 2) juntos, um membro que é const só pode ter um valor atribuído a ele na boot, o que acontece durante a lista de boot.

Variáveis const e de referência devem ser inicializadas na linha em que são declaradas.

  class Something { private: const int m_nValue; public: Something() { m_nValue = 5; } }; 

produziria código equivalente a;

 const int nValue; // error, const vars must be assigned values immediately nValue = 5; 

Atribuir valores de variables ​​de membro const ou de referência no corpo do construtor não é suficiente.

C ++ fornece outra maneira de inicializar as variables ​​de membro que permite inicializar as variables ​​de membro quando elas são criadas, e não depois. Isso é feito através do uso de uma lista de boot.

Você pode atribuir valores a variables ​​de duas maneiras: explicita e implicitamente: view plaincopy to clipboardprint?

 int nValue = 5; // explicit assignment double dValue(4.7); // implicit assignment 

Usar uma lista de boot é muito semelhante a fazer atribuições implícitas.

Lembre-se de que a lista de boot de membros, usada para inicializar objects de dados base e membros, está na definição, não na declaração do construtor.

Mais sobre cpp-tutorial e Code Wrangler .

Porque variables ​​constantes e referências devem ser inicializadas no momento da declaração, ou seja, antes do uso. Mas os construtores irão atribuir valor a uma variável não inicializar a variável, portanto, você deve usar a lista initailizier para constante e referências