Estaba escribiendo código hoy y obtuve un error de compilación extraño, que parece ser causado por la inicialización de las variables miembro en un orden diferente al que se declararon.¿Por qué debería inicializar las variables de miembro en el orden en que están declaradas?
Ejemplo:
class Test {
int a;
int b;
public:
Test() : b(1), a(2) {
}
};
int main() {
Test test;
return 0;
}
Entonces, si compilo con -Werror -Wall
:
$ g++ -Werror -Wall test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:3:9: error: ‘Test::b’ will be initialized after [-Werror=reorder]
test.cpp:2:9: error: ‘int Test::a’ [-Werror=reorder]
test.cpp:6:5: error: when initialized here [-Werror=reorder]
cc1plus: all warnings being treated as errors
que dan cuenta de que -Wall
está pidiendo explícitamente GCC ir over-the-top con advertencias, pero supongo que hay una razón para todos ellos. Entonces, ¿cómo podría importar el orden de las variables iniciales de los miembros?
-Werror, como indican los mensajes, le dice al compilador que trate todas las advertencias como errores. El código tal como está escrito es válido y su significado está bien definido (aunque hay argumentos razonables para no escribirlo de esa manera), pero con -Werror, el compilador no cumple con el estándar porque se niega a compilar un código válido. –