const
y las variables de referencia se deben inicializar en la línea que se declaran.
class Something
{
private:
const int m_nValue;
public:
Something()
{
m_nValue = 5;
}
};
produciría un código equivalente a;
const int nValue; // error, const vars must be assigned values immediately
nValue = 5;
La asignación de const o valores de variables de miembro de referencia en el cuerpo del constructor no es suficiente.
C++ proporciona otra forma de inicializar las variables miembro que permite inicializar las variables miembro cuando se crean en lugar de después. Esto se hace mediante el uso de una lista de inicialización.
Puede asignar valores a las variables de dos maneras: explícita e implícitamente: ver plaincopy a clipboardprint?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
Usar una lista de inicialización es muy similar a realizar asignaciones implícitas.
Recuerde que la lista de inicialización de miembros, utilizada para inicializar objetos de datos base y miembros, está en la definición, no en la declaración del constructor.
Más sobre cpp-tutorial y Code Wrangler.
Felicitaciones por su primera respuesta ...^_^ – paercebal
Acerca de no.2. ASFAIK esto es cierto solo para tipos no integrados con ctors predeterminados. Yo diría que no.1 junto con lo que usted indicó anteriormente la lista es suficiente para responder la pregunta. De todos modos, buena respuesta +1 de mí! –
@AndreasMagnusson: antes de C++ 11, la inicialización predeterminada se realiza para todos los miembros no nombrados en la lista de inicializadores, incluidos los tipos primitivos incorporados (para lo cual la inicialización predeterminada significa "sin inicialización en absoluto"). Si no hay un constructor predeterminado (accesible), entonces es un error de compilación. Luego, los inicializadores de llave o igual cambiaron todo esto. –