MSDNは、無名構造体は C++ では非標準であると考えています。
Microsoft C 拡張機能を使用すると、名前を付けずに、別の構造内で構造変数を宣言できます。これらのネストされた構造は、無名構造と呼ばれます。C++ では無名構造を使用できません。
匿名構造体のメンバーには、それを含む構造体のメンバーであるかのようにアクセスできます。
@K-ballo同意します。
この機能は、名前のない構造体を作成することと必ずしも同じではないと言われていますが、標準的な言葉遣いに関しては違いがわかりません。
C++11 は次のように述べています。
[C++11: 9/1]
: [..] class-headがclass-head-nameを省略したclass -specifierは、名前のないクラスを定義します。
名前が欠落している型定義の文法構造全体を提供します。
C++03 にはこの明示的な表現がありませんが、同様にidentifier
型定義の がオプションであることを示し、 および の「名前のないクラス」を参照し9.4.2/5
ます3.5/4
。
- では、MSDN は間違っていますか? これらはすべて完全に標準的なものなのでしょうか?
- または、「名前のない構造体/クラス」と、この C++03/C++11 機能によってカバーされないようにするメンバーとして使用された場合との間に欠けている微妙な点がありますか?
- 「名前のない構造体」と「匿名の構造体」の基本的な違いが欠けていますか? それらは私には同義語のように見えます。