次のコード:
class C
{
int a, b;
public:
C()
:b(0), a(0)
{}
};
GCC が初期化の順序が間違っていると文句を言うようになります。具体的には:
../AppSrc/MainForm.cpp: In constructor 'C::C()':
../AppSrc/MainForm.cpp:51:9: warning: 'C::b' will be initialized after
../AppSrc/MainForm.cpp:51:6: warning: 'int C::a'
ここで大したことは何ですか、なぜ泣き言を言うのですか?メンバー間に相互依存関係がある、またはその可能性があるわけではありません。プリミティブ、当たり前。
ああ、どうすればこの警告をオフにするか、少なくとも攻撃的でないようにできますか?
編集: C++ で足を撃つ方法はたくさんあります。メンバーの相互依存性はその 1 つです。私はそれを認識しており、ヌルポインターの逆参照を避けるのと同じように、とにかくそれを避けています。
上記のスニペットのように、任意の初期化順序は完全に安全です。コンパイラがそのようなケースを認識せず、とにかく不平を言うことに不満を持っています。つまり、null チェックが直前に行われていないすべてのポインター逆参照について不平を言うわけではありませんね。