Maison > Article > développement back-end > Pourquoi les listes de paramètres de modèle redondantes dans les constructeurs de modèles de classe C 20 sont-elles désormais une erreur ?
Listes de paramètres de modèle redondants dans les constructeurs de modèles de classe en C 20
En C , la syntaxe de déclaration des constructeurs dans les modèles de classe a subi une modification en C 20. Auparavant, le code de la forme suivante était considéré comme bien formé :
template<typename T> struct S { S<T>(); };
Malgré la redondance du
error: expected unqualified-id before ')' token 3 | S<T>(); ^
Bien que cette erreur ne soit pas rencontrée dans GCC10.2 ou Clang avec -std= c 20, il découle d'un changement fondamental introduit dans C 20.
Selon la section de compatibilité C 20, l'utilisation d'un simple-template-id comme déclarant-id pour un constructeur ou un destructeur n'est plus valide. Cette décision vise à éliminer les redondances potentielles sujettes aux erreurs.
Le nouveau libellé de la section [class.ctor] de C 20 spécifie que pour les constructeurs dans les déclarations de membres dans les modèles de classe, le nom de classe injecté doit être utilisé à la place. :
template<typename T> struct S { S(); // Use injected-class-name };
Dans cet exemple, S représente le nom de classe injecté pour le modèle de classe interne. Par conséquent, le
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!