Maison > développement back-end > C++ > Quelle est la différence entre '=default' et '{}' pour les constructeurs et destructeurs par défaut en C ?

Quelle est la différence entre '=default' et '{}' pour les constructeurs et destructeurs par défaut en C ?

Linda Hamilton
Libérer: 2024-12-07 04:47:10
original
474 Les gens l'ont consulté

What's the Difference Between

Comprendre la différence entre "=default" et "{}" pour le constructeur et le destructeur par défaut

Alors que "=default" et "{ }" peut sembler interchangeable pour les constructeurs et les destructeurs par défaut, il existe des distinctions clés lorsque l'on considère les destructeurs non virtuels et constructeurs.

Destructeurs non virtuels

Lorsqu'il s'agit de destructeurs non virtuels, la syntaxe "=default" joue un rôle important. Il demande au compilateur de générer automatiquement le destructeur comme il le ferait pour les classes triviales, ce qui rend le type considéré comme trivial. D'un autre côté, "{}" crée un destructeur fourni par l'utilisateur, modifiant le statut de trivialité de la classe.

Constructeurs non virtuels

De même, pour les non-virtuels -constructeurs virtuels, en utilisant "=default" permet au compilateur de générer un constructeur par défaut, en conservant la trivialité. Cependant, "{}" spécifie un constructeur fourni par l'utilisateur, ce qui peut avoir un impact sur la trivialité de la classe.

Classes triviales

En C 11, une classe triviale est une classe qui ne Je n'ai aucune fonction membre spéciale fournie par l'utilisateur (constructeur par défaut, constructeurs/affectation de copie/déplacement, destructeurs). Ces fonctions sont générées automatiquement, permettant d'appliquer des optimisations comme memcpy.

Exemple

Considérez le code suivant :

struct Trivial
{
  int foo;
};

struct NotTrivial
{
  int foo;

  NotTrivial() {}
};

struct Trivial2
{
  int foo;

  Trivial2() = default;
};
Copier après la connexion
  • Trivial est trivial car il n'a aucun membre spécial fourni par l'utilisateur fonctions.
  • NotTrivial n'est pas trivial car il a un constructeur par défaut fourni par l'utilisateur.
  • Trivial2 est trivial même s'il a un constructeur marqué comme "=default", car cela appelle toujours le compilateur constructeur par défaut génération.

Conclusion

Bien que "=default" et "{}" puissent sembler similaires, ils peuvent avoir des implications substantielles sur la trivialité des classes lorsqu'ils sont utilisés avec des destructeurs ou des constructeurs non virtuels. "=default" conserve le comportement par défaut du compilateur et préserve la trivialité, tandis que "{}" crée des fonctions fournies par l'utilisateur et modifie potentiellement le statut de trivialité de la classe.

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