MSDN estime que les structures anonymes ne sont pas standard en C++ :
Une extension C de Microsoft vous permet de déclarer une variable de structure à l'intérieur d'une autre structure sans lui donner de nom. Ces structures imbriquées sont appelées structures anonymes. C++ ne permet pas les structures anonymes.
Vous pouvez accéder aux membres d'une structure anonyme comme s'ils étaient membres de la structure conteneuse.
On m'a dit que cette fonctionnalité n'est pas nécessairement la même que de simplement créer une structure non nommée mais je ne vois pas de distinction en termes de libellé standard.
C++11 dit:
[C++11: 9/1]
: [..] Un class-specifier dont le class-head omet le class-head-name définit une classe sans nom.
et fournit une construction grammaticale entière pour une définition de type sans nom.
C++03 ne contient pas ce libellé explicite, mais indique de manière similaire que l'identifiant
dans une définition de type est optionnel, et fait référence à des "classes sans nom" dans 9.4.2/5
et 3.5/4
.
- Donc, MSDN a-t-il tort, et toutes ces choses sont-elles complètement standard?
- Ou y a-t-il une subtilité que je ne comprends pas entre "structures/classes sans nom" et les mêmes lorsqu'ils sont utilisés comme membres qui les empêche d'être couverts par cette fonctionnalité de C++03/C++11?
- Est-ce que je ne vois pas de différence fondamentale entre "structure sans nom" et "structure anonyme"? Ils me semblent synonymes.