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; };
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!