今日、いくつかのコードを書いていて、変なコンパイル エラーが発生しました。これは、宣言された順序とは異なる順序でメンバー変数を初期化したことが原因のようです。
例:
class Test {
int a;
int b;
public:
Test() : b(1), a(2) {
}
};
int main() {
Test test;
return 0;
}
次に、次のようにコンパイルすると-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
私はそれ-Wall
がGCCに過度の警告を出すように明示的に要求していることを理解していますが、それらすべてには理由があると思います. では、メンバー変数を初期化する順序はどのように重要なのでしょうか?