So che in C++ 11 ora possiamo usare using
di scrivere tipo alias, come typedef
s:Qual è la differenza tra "typedef" e "using" in C++ 11?
typedef int MyInt;
è, da quanto ho capito, equivalente a:
using MyInt = int;
E questo nuova sintassi emerso dallo sforzo di avere un modo per esprimere "template typedef
":
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Ma, con i primi due non-t esemplificare esempi, ci sono altre sottili differenze nello standard? Ad esempio, typedef
s fa l'aliasing in un modo "debole". Cioè non crea un nuovo tipo ma solo un nuovo nome (le conversioni sono implicite tra quei nomi).
È lo stesso con using
o genera un nuovo tipo? Ci sono delle differenze?
Io personalmente preferisco la nuova sintassi, perché è molto più simile a regolare l'assegnazione variabili, migliorando la leggibilità. Ad esempio, preferisci 'typedef void (& MyFunc) (int, int);' oppure 'using MyFunc = void (int, int);'? –
Concordo pienamente, uso solo la nuova sintassi ora. Ecco perché lo stavo chiedendo, per essere sicuro che non ci fosse davvero alcuna differenza. – Klaim
@MatthieuM. questi due sono diversi tra loro. Dovrebbe essere 'typedef void MyFunc (int, int);' (che in realtà non sembra così male), o 'using MyFunc = void (&) (int, int);' –