¿Cómo inicializar la lista en C ++?
Mira un código simple:
class Test
{
public:
Test(int a)
{
ma = a;
}
private:
const int ma;
};
Resultado de la operación: Puedo
ver que el programa está funcionando mal, ¿cuál es el motivo?
La razón es que las variables modificadas const deben inicializarse.
Entonces, ¿cómo se inicializan las variables modificadas const en C ++?
Mira el siguiente fragmento de código:
class Test
{
public:
Test(int a):ma(a)
{
//ma = a;
}
private:
const int ma;
};
Por supuesto, en realidad, hay más de una variable en muchos casos. Entonces, ¿con qué tiene que ver el orden de ejecución en la lista de inicialización del constructor?
Mira un fragmento de código:
class Test
{
public:
Test(int a)
:ma(mb), mb(a)
{
}
void Show()
{
std::cout << "ma: " << ma << std::endl;
std::cout << "mb: " << mb << std::endl;
}
private:
int ma;
int mb;
};
int main()
{
Test test(10);
test.Show();
return 0;
}
¿Cuáles son los valores de ma y mb? ma = mb = 10?
Mire el resultado:
puede ver que ma es un valor inválido (cccccccc se usa para la inicialización al abrir la memoria, y cccccccc es un valor inválido) mb = 10; se puede ver que mb en sí mismo aún no ha sido asignado a ma Asignado por a;
mira el código a continuación:
class Test
{
public:
Test(int a)
:ma(mb), mb(a)
{
}
void Show()
{
std::cout << "ma: " << ma << std::endl;
std::cout << "mb: " << mb << std::endl;
}
private:
int mb;
int ma;
};
int main()
{
Test test(10);
test.Show();
return 0;
}
¿Cuáles son los valores de ma y mb en este momento, y son los mismos que antes?
Solo mb = 10, hay ma = 10; ¿
es un poco incómodo?
A continuación, observamos la diferencia entre las dos piezas de código:
puede ver que la única diferencia entre los códigos en ambos extremos es el orden de declaración de la variable.
Por lo tanto, el orden de ejecución en la lista de inicialización del constructor ** C ++ está relacionado con el orden de declaración de los miembros, no con el orden de implementación. **
Mire de nuevo el resultado de cambiar el orden de realización.