Je sais qu'en C ++ 11, nous pouvons maintenant utiliser using
pour écrire un alias de type, comme typedef
s:
typedef int MyInt;
D'après ce que je comprends, équivaut à:
using MyInt = int;
Et cette nouvelle syntaxe est née de l'effort pour trouver un moyen d'exprimer " template typedef
":
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Mais, avec les deux premiers exemples non modèles, y a-t-il d'autres différences subtiles dans la norme? Par exemple, typedef
effectuez un aliasing de manière "faible". C'est-à-dire qu'il ne crée pas un nouveau type mais seulement un nouveau nom (les conversions sont implicites entre ces noms).
Est-ce la même chose using
ou génère-t-il un nouveau type? Y a-t-il des différences?
typedef void MyFunc(int,int);
(ce qui n'a pas l'air aussi mauvais), ouusing MyFunc = void(&)(int,int);
using MyFunc = void(&)(int,int);
? cela signifie-t-il MyFunc
une référence à une fonction? que faire si vous omettez le & ?
typedef void (&MyFunc)(int,int);
. Si vous omettez le &
c'est équivalent àtypedef void MyFunc(int,int);
typedef void (&MyFunc)(int,int);
ouusing MyFunc = void(int,int);
?