Maison > développement back-end > C++ > le corps du texte

Pourquoi les listes de paramètres de modèle redondantes dans les constructeurs de modèles de classe C 20 sont-elles désormais interdites ?

Barbara Streisand
Libérer: 2024-11-28 02:10:10
original
303 Les gens l'ont consulté

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now Forbidden?

Suppression des listes de paramètres de modèle redondants dans les constructeurs de modèles de classe en C 20

En C 17, il était acceptable que les constructeurs de modèles de classe aient listes de paramètres de modèle redondantes. Par exemple :

template<typename T>
struct S {
    S<T>();
};
Copier après la connexion

Or, en C 20, ce n'est plus le cas. Un changement récent exige que tous les constructeurs de modèles de classe utilisent le nom de classe injecté, ce qui élimine la redondance dans le déclarateur.

Cette modification est documentée dans la section de compatibilité du projet C 20 :

[diff.cpp17.class]
**Affected subclauses**: [class.ctor] and [class.dtor]
**Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor.
**Rationale**: Remove potentially error-prone option for redundancy.
**Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
Copier après la connexion

Plus précisément, l'expression id dans le déclarateur du constructeur doit maintenant prendre l'un des éléments suivants form :

  • Dans une déclaration de membre dans une spécification de membre non-ami d'une classe, le nom de classe injecté de la classe englobante.
  • Dans une déclaration de membre dans un non-ami -friend spécification de membre d'un modèle de classe, le nom de classe nommant l'instanciation actuelle du modèle de classe englobant.

Par conséquent, le bon la déclaration du constructeur en C 20 est simplement :

template<typename T>
struct S {
    S();
};
Copier après la connexion

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