Maison > développement back-end > C++ > Pourquoi utiliser `= default` pour les constructeurs par défaut en C 11 ?

Pourquoi utiliser `= default` pour les constructeurs par défaut en C 11 ?

DDD
Libérer: 2024-12-10 07:52:09
original
929 Les gens l'ont consulté

Why Use `= default` for Default Constructors in C  11?

Pourquoi utiliser "= default" dans les constructeurs par défaut C 11 ?

La syntaxe traditionnelle du constructeur par défaut en C impliquait simplement de définir une fonction constructeur vide :

S() {}
Copier après la connexion

Cependant, C 11 a introduit la syntaxe "= default ", qui fournit plusieurs avantages :

  1. Délimitation explicite de l'utilisation de l'ODR : Un constructeur par défaut explicitement défini par défaut est spécifiquement défini par la norme comme identique à un constructeur par défaut défini par l'utilisateur sans liste d'initialisation et un instruction composée vide. Cela garantit un comportement cohérent dans différents cas d'utilisation.
  2. Propriétés de type agrégé et trivial : Alors qu'un constructeur vide traditionnel conserve les propriétés de type agrégé et trivial, un constructeur par défaut déclaré, même vide, le fait pas. L'utilisation de "= default" supprime explicitement ces propriétés si vous le souhaitez.
#include <type_traits>

struct X {
    X() = default;
};

struct Y {
    Y() {}
};

int main() {
    static_assert(std::is_trivial<X>::value, "X should be trivial");
    static_assert(std::is_pod<X>::value, "X should be POD");
    
    static_assert(!std::is_trivial<Y>::value, "Y should not be trivial");
    static_assert(!std::is_pod<Y>::value, "Y should not be POD");
}
Copier après la connexion
  1. Propriétés correspondantes du constructeur implicite : La syntaxe "= default" garantit que les valeurs explicitement définies Le constructeur par défaut correspond aux propriétés du constructeur implicite, y compris les spécifications constexpr et d'exception. Cela améliore la lisibilité du code.
  2. Syntaxe uniforme : La syntaxe "= default" fournit une méthode uniforme pour définir des fonctions membres spéciales telles que des constructeurs et des destructeurs de copie/déplacement, rendant le code plus cohérent et plus facile à comprendre.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal