Pourquoi faire de ce type de alias en C++ utilisation "à l'aide" au lieu de "typedef" dans leur syntaxe?
Clairement, type d'alias et basé sur un modèle de type alias sont sémantiquement équivalents typedefs et une extension des typedefs de modèle de prise en charge. Comment se fait-nouvelle syntaxe avec le using
mot-clé a été créé pour ces au lieu d'utiliser des typedefs pour la première et de certains de la syntaxe de l'extension, le mot typedef
.
REMARQUE: Ce n'est pas un clone de la "différence entre l'utilisation et la définition de type" question. Je sais que using
donne l'avantage de définir une famille de typedef
s. Ce que je demande, c'est pourquoi la norme de gens décident d'avoir cette extension de l'utilisation de la using
mot-clé à la place de la typedef
mot-clé. Il semble que ça ajoute de la confusion dans la langue.
- il n'est pas. Je sais que
using
donne l'avantage de définir une famille de typedefs. Ce que je demande, c'est pourquoi la norme de gens décident d'avoir cette extension de l'utilisation de lausing
mot-clé à la place de latypedef
mot-clé. Il semble que ça ajoute de la confusion dans la langue. - Éventuellement, cela a à voir avec les problèmes mentionnés dans N1406 et comment N1499 résout eux. La solution est traduit dans la syntaxe: modèle alias de ne pas définir des types, comme une définition de type de modèle suggère, et qui s'oppose à la proposition initiale de définition de type de modèles qui ont permis de spécialisation (dans une version de celui-ci).
- TL;DR parce que la définition de type est un horrible illisible hack et il y avait la possibilité de le remplacer avec un nettoyant plus doux de la syntaxe.
- dpj typedef ne pas ajouter un type soit, traditionnellement, ce qu'il est appelé est un type faible, mais cela signifie simplement il n'y a pas de type dans le compilateur est de type table.
Vous devez vous connecter pour publier un commentaire.
Ce que vous suggérez est effectivement proposé en 2002 dans le document N1406 par Herb Sutter. Il permettrait, par exemple, pour écrire:
Cela a été ensuite révisée en N1449 par Gabriel Dos Reis et Tapis de Marcus. Ils adoptent la
using
la syntaxe, et de noter les points suivants:Ils ont également état:
Cette syntaxe a été adopté dans la proposition finale N2258 par Gabriel Dos Reis et Bjarne Stroustrup.
using =
reflète la sémantique sur un niveau de la syntaxe.Voici ce que Bjarne Stroustrup dit au sujet de pourquoi ils ont introduit
using
au lieu de l'étendretypedef
:Il affirme aussi qu'il aime cette syntaxe aussi plus pour habitude typedefs:
Il est tout à fait correct ici, cela semble très propre. En revanche, une définition de type serait extrêmement compliquée avec le nom quelque part dans le milieu:
Voici un explication (voir page 4) à partir de leur proposition qui est encore plus en profondeur:
De sorte qu'il a essentiellement deux points ici:
using
modèle devient une famille de types, pas un type, donctypedef
est "mauvais"using
peuvent être lus comme une phrase anglaiseusing
devrait venir remplacer typedefs. La syntaxe est beaucoup moins ambigu.void(*)(double)
exemple. 🙂typedef void(*)(double) PF;
Aurait été de (presque) aussi clair queusing
. Modèle typedefs - eh bien, yould ont travaillé, on pourrait avoir utilisé le même que le pointeur de la fonction typedefs... Retour à des pointeurs de fonction, en fait, je me sens comme lors de la définition des variables: Pourquoi ne pasint(*)(double) callback;
? Je sais, la philosophie, la fin est la même qu'avecchar *a, b, *c;
. Une chose que j'ai peut lus, mais n'ai jamais ami avec et ne jamais utiliser moi-même sur le code que ma lecture personnelle est différente...