Différences entre "=default" et "{}" pour les constructeurs et les destructeurs par défaut
En C , le constructeur et le destructeur par défaut sont spéciaux fonctions membres qui sont automatiquement générées par le compilateur si elles ne sont pas explicitement définies par l'utilisateur. Cependant, pour certains scénarios, il devient nécessaire de remplacer ces comportements par défaut, posant la question de savoir si "=default" et "{}" offrent la même fonctionnalité.
Si un La classe nécessite un destructeur virtuel mais l'implémentation est identique à la version générée par le compilateur, la syntaxe "=default" peut être utilisée. Cela garantit que le compilateur génère le destructeur virtuel sans avoir besoin d'une définition explicite. D'un autre côté, l'utilisation d'une définition vide "virtual ~Widget() {}" permet d'obtenir le même effet, avec un minimum de saisie.
Contrairement aux destructeurs, l'impact de "=default " pour les constructeurs par défaut est très différent de "{}." Lors de l'utilisation de "Widget() = default", le compilateur génère automatiquement un constructeur par défaut pour la classe "Widget". Ce constructeur généré se comporte comme si aucun constructeur n'était défini par l'utilisateur. Par conséquent, cela contribue à faire de la classe un « type trivial » dans la terminologie C 11.
À l'inverse, « Widget() {} » crée un constructeur par défaut fourni par l'utilisateur, ce qui empêche la classe d'être considérée comme triviale. C 11 impose des restrictions sur les types triviaux, permettant des opérations telles que memcpy pour une initialisation efficace.
Pour les destructeurs virtuels, "=default" et "{}" se comportent de la même manière. Cependant, pour les constructeurs par défaut, "=default" génère un constructeur par défaut fourni par le compilateur, tandis que "{}" crée un constructeur fourni par l'utilisateur, affectant potentiellement la trivialité de la classe. Le choix entre "=default" et "{}" pour les constructeurs par défaut doit être basé sur le comportement souhaité et les implications pour la 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!