Avatar ·

Was ist der Unterschied zwischen typedef und using in C++? Wann verwendet man was?

Hallo Kollegen! Ich habe vor kurzem angefangen, C++ zu lernen, und bin auf zwei Arten gestoßen, Typ-Aliase zu erstellen: das gute alte `typedef` und das neue `using` (auch Alias-Deklaration genannt), das in C++11 eingeführt wurde. Ich verstehe, dass beide scheinbar dasselbe tun. Zum Beispiel kann ich schreiben: ```cpp typedef unsigned long long ULL; using ULL = unsigned long long; ``` Und es scheint keinen Unterschied zu geben. Aber ich habe gehört, dass `using` besser ist und in modernem Code empfohlen wird. Warum? Was ist der tatsächliche Unterschied? Gibt es Fälle, in denen `typedef` nicht funktioniert, aber `using` schon? Oder umgekehrt? Mich interessieren besonders komplexe Fälle: die Arbeit mit Funktionszeigern, Templates und verschachtelten Typen. Ich habe versucht, einen Alias für eine Template-Klasse mit `typedef` zu erstellen, und es hat nicht funktioniert. Vielleicht mache ich etwas falsch.