HOWTO · C++

C++ 匿名構造体

このチュートリアルでは、C++ での無名構造体の使用について説明します。

このチュートリアルでは、C++ での無名構造体の使用について説明します。

C++ の匿名構造体

匿名構造体は、C 言語でもサポートされていなかったため、C++ ではサポートされていませんが、C とは異なり、C++ は匿名共用体をサポートしています。構造体と共用体に関する ANSI C および C++ 標準によると、次のようになります。

  1. ANSI C++ 匿名共用体: サポート
  2. ANSI C++ 匿名構造体: サポートされていません
  3. ANSI C 匿名共用体: サポート
  4. ANSI C 匿名構造体: サポートされていません

C++ は無名構造体をサポートしていません。これは、互換性のために必要な C が無名構造体をサポートしていないためです。 C++ では匿名構造体は使用されませんが、いくつかの代替手段が提供されます。

たとえば、次のコードを参照してください。

struct DemoVector {
  float v[3];
  float &operator[](int x) { return v[x]; }

  float &a() { return v[0]; }
  float &b() { return v[1]; }
  float &c() { return v[2]; }
};

上記のコードは、無名構造体に似たユーザー定義型の機能を提供します。 C++ の共用体を使用して、同様のことを行うことができます。

以下のコードを参照してください。

union DemoVector {
  struct {
    float a, b, c;
  };
  float v[3];
};

匿名構造体は現在、ISO C11gcc、および Apple の llvm で許可されていますが、ISO C++11 ではサポートされていません。