Initialisation globale C 11 pour les classes avec initialiseurs de membres non statiques
En C 11, les structures et les classes avec des constructeurs définis par l'utilisateur et des ou les données membres non statiques protégées ne sont pas considérées comme des agrégats. Historiquement, c'était également le cas pour les classes avec des initialiseurs de membres non statiques, même si elles manquaient de constructeurs définis par l'utilisateur.
Cependant, en C 14, cette restriction a été supprimée. Désormais, les classes avec des initialiseurs de membres non statiques peuvent toujours être des agrégats, à condition qu'elles répondent aux autres exigences pour les agrégats :
Pour exemple :
struct A { int a = 3; int b = 3; }; int main() { A a{0, 1}; // This is now allowed in C++14 return 0; }
Ce changement a été motivé par le désir d'aligner le comportement d'initialisation des agrégats avec l'intuition. Les initialiseurs en classe sont essentiellement équivalents aux constructeurs définis par l'utilisateur, mais il est contre-intuitif qu'ils empêchent une classe d'être un agrégat.
Depuis G 5.0, les agrégats C 14 avec des initialiseurs de données membres non statiques ont été pris en charge en utilisant std=c 1y ou -std=c 14.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!