Eu sei que no C ++ 11 agora podemos usar using
para escrever alias de tipo, como typedef
s:
typedef int MyInt;
É, pelo que entendi, equivalente a:
using MyInt = int;
E essa nova sintaxe surgiu do esforço de ter uma maneira de expressar " template typedef
":
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Mas, com os dois primeiros exemplos não-modelo, existem outras diferenças sutis no padrão? Por exemplo, typedef
s faz alias de maneira "fraca". Ou seja, ele não cria um novo tipo, mas apenas um novo nome (as conversões estão implícitas entre esses nomes).
É o mesmo com using
ou gera um novo tipo? Existem diferenças?
typedef void MyFunc(int,int);
(que na verdade não parece tão ruim), ouusing MyFunc = void(&)(int,int);
using MyFunc = void(&)(int,int);
? significa que MyFunc
é uma referência a uma função? e se você omitir o & ?
typedef void (&MyFunc)(int,int);
. Se você omitir o &
equivalente atypedef void MyFunc(int,int);
typedef void (&MyFunc)(int,int);
ouusing MyFunc = void(int,int);
?