Les mots-clés 'typedef' et 'using' en C facilitent tous deux la création d'alias de type. Bien qu'ils servent des objectifs similaires, des différences subtiles existent dans leur implémentation.
En C 11 et au-delà, la syntaxe « using » est apparue comme un moyen concis de définir des alias de type. Par exemple :
using MyInt = int;
Ceci est sémantiquement équivalent au « typedef » traditionnel :
typedef int MyInt;
Cependant, la syntaxe « using » a gagné en popularité en raison de sa capacité à exprimer des « typesdefs de modèles » ":
template<class T> using MyType = AnotherType<T, MyAllocatorType>;
Maintenant, explorons les différences potentielles entre 'typedef' et 'using' concernant force d'alias. 'typedef' est connu pour son comportement d'alias "faible", ce qui signifie qu'il ne crée pas de nouveau type mais établit simplement un nouveau nom. Les conversions entre les types alias et leurs types d'origine sont implicites.
La question se pose : est-ce que « utiliser » se comporte de la même manière ou entraîne-t-il la création d'un nouveau type ? La réponse, selon la norme C (7.1.3.2), est qu'ils sont équivalents en sémantique :
"It [using] has the same semantics as if it were introduced by the typedef specifier. In particular, it does not define a new type and it shall not appear in the type-id."
Par conséquent, "typedef" et "using" créent des alias faibles sans générer de nouveaux types, ce qui entraîne dans les conversions implicites entre les types alias et originaux.
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!