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 :
-
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.
-
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
-
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.
-
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!