Maison > développement back-end > C++ > Les classes avec des initialiseurs de membres non statiques peuvent-elles être des agrégats en C 14 ?

Les classes avec des initialiseurs de membres non statiques peuvent-elles être des agrégats en C 14 ?

Susan Sarandon
Libérer: 2024-11-29 03:50:13
original
519 Les gens l'ont consulté

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

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 :

  • Aucun constructeur défini par l'utilisateur
  • Aucun non privé ou protégé -Membres de données statiques
  • Aucune classe de base
  • Aucune fonction virtuelle

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal