1. ホーム
  2. c++

[解決済み] g++ -Wreorderは何のためにあるのですか?

2022-02-27 10:47:46

質問

g++ の -Wall オプションに -Wreorder があります。 このオプションが何をするのか、以下に説明します。 なぜ誰かが気にするのか(特に-Wallでデフォルトでこれをオンにするほど)、私には明らかではありません。

-Wreorder (C++のみ)
  コードで指定されたメンバ初期化子の順序が異なる場合に警告を表示します。
  が実行されなければならない順序と一致します。 例えば

    構造体 A {
      int i;
      int j;
      A(): j (0), i (1) { }.
    };

  コンパイラはiとjのメンバ初期化子を並べ替えて
  という警告が表示されます。
  の効果があります。 この警告は、-Wallで有効になります。

解決方法は?

考えてみてください。

struct A {
    int i;
    int j;
    A() : j(0), i(j) { }
};

現在 i はゼロではなく、何らかの未知の値で初期化されます。

あるいは i は、その順序が重要であるような副作用を持つかもしれません。例えば

A(int n) : j(n++), i(n++) { }