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.