existe-t-il de toute façon pour distinguer le nom d'origine d'un type d'un nom TypeDEF pour ce type?
Par exemple: P>
class C1 {}; typedef C1 C2;
5 Réponses :
Ils sont complètement em> indiscernables après le Typedef code>. P>
Un typedef crée un alias et ils sont indiscernables comme un type. Il y a d'autre part certaines constructions de syntaxes spécifiques nécessitant le type réel et non le typeDEF-DE (déclaration / définition du constructeur / destructeurs ...), mais c'est une question différente. Comme un type, ils sont indiscernables. P>
Savez-vous si c'est le seul cas (constructeurs / destructeurs)? C'est-à-dire quelles sont les autres constructions de la syntaxe des constructeurs / destructeurs?
@ user1131467 Voir 7,1,3 $ Pour plus d'informations sur Typedef code>. En ce qui concerne votre commentaire 7,1,3 / 8 $ et 7.1.6.3 $ peut donner une clarification supplémentaire.
Vous voudrez peut-être lire sur le nom de la classe injecté i>. Intérieur C1 CODE> Il existe des rulstions spéciales pour rechercher le nom
C1 code>. Mais depuis
C2 code> Noms de la même classe, rechercher
C1 code> dans
C2 code> est également spécial. OTOH,
C2 code> n'est pas injecté dans
C1 code>.
De plus, vous ne pouvez pas transmettre déclarer un nom de classe Typedeffed.
du Référence complète : P>
"C vous permet de définir explicitement les nouveaux noms de type de données à l'aide du mot-clé TPYDEF. Vous ne créez pas de nouveau type de données, mais définissez plutôt un nouveau nom pour un type existant." P> blockQuote>
Qu'est-ce qui est intéressant, c'est (peut-être) C ++ 1y implémentera un TypeDef typé fort (appelé opaque typedef em>) qui n'est pas interchangeable le nom de base: rapport pdf p>
Oui, il y a un tel cas. Vous ne pouvez pas transmettre le type en utilisant le type de caractères. Par exemple, autre que cela, un typef crée un alias de type d'identité et devrait être complètement équivalent. P> classe C2; code> ne serait pas valide. P>
oui. Pour des raisons de compatibilité C, vous êtes autorisé à ajouter explicitement La raison en est que c avait des espaces de noms séparés pour les structs et les fonctions, vous pouvez également avoir une fonction classe code> à c1:
classe C1 foo; code>, mais
classe C2 foo; code> est illégal . P>
vide c1 (int) code>. Cela n'a provoqué aucune ambiguïté car chaque nom de structure devait être préfixé avec
struct code>. Mais si vous tapez
struct C1 code>, le nom TypeDEF n'a pas été autorisé à alias une fonction existante. P>