Was ist der Unterschied zwischen 'typedef' und 'using' in C ++ 11?

Ich weiß, dass in C++11 können wir nun verwenden using zu schreiben, geben Sie den alias, wie typedefs:

typedef int MyInt;

Ist, von dem, was ich verstehe, ist das äquivalent zu:

using MyInt = int;

Wird und neue syntax entstand aus dem bemühen, einen Weg zu expresstemplate typedef":

template< class T > using MyType = AnotherType< T, MyAllocatorType >;

Aber, mit den ersten zwei nicht-template-Beispiele, gibt es andere subtile Unterschiede in der Norm? Zum Beispiel typedefs tun aliasing, die in eine "schwache" Art und Weise. Das es ist keine neue type, sondern nur einen neuen Namen (sind implizite Konvertierungen zwischen diesen Namen).

Ist es das gleiche mit using oder tut, erzeugt es ein neues geben? Gibt es irgendwelche Unterschiede?

Kommentar zu dem Problem
Ich persönlich bevorzuge die neue syntax, denn es ist viel mehr ähnlich wie normale Variablen-Zuordnung, was die Lesbarkeit verbessert. Zum Beispiel, bevorzugen Sie typedef void (&MyFunc)(int,int); oder mit MyFunc = void(int,int); ? Kommentarautor: Matthieu M.
Ich Stimme voll und ganz, ich habe nur die neue syntax verwenden jetzt. Das ist, warum ich fragte, um sicher zu sein, gibt es wirklich keinen Unterschied. Kommentarautor: Klaim
@MatthieuM. diese beiden sind Verschieden btw. Es sollte typedef void MyFunc(int,int); (die eigentlich nicht so schlecht), oder mit MyFunc = void(&)(int,int); Kommentarautor: R. Martinho Fernandes
@R. MartinhoFernandes warum brauchen Sie (&) in mit MyFunc = void(&)(int,int); ? bedeutet es MyFunc ist eine Referenz auf eine Funktion? was ist, wenn du weglassen, die &? Kommentarautor: Rich
Ja, es ist eine Funktionsreferenz. Es ist äquivalent zu typedef void (&MyFunc)(int,int);. Wenn du weglassen, die & ist äquivalent zu typedef void MyFunc(int,int); Kommentarautor: R. Martinho Fernandes

InformationsquelleAutor der Frage Klaim | 2012-05-25

Schreibe einen Kommentar