Was ist in C ++ der Unterschied zwischen "using ll = long long" und "typedef long long ll"?


Antwort 1:

Das erste ist ein Typ-Alias ​​und das zweite ist eine Typdefinition.

Ein Typ-Alias ​​ersetzt den Typ einfach in der Quellkompilierung.

Ein typedef trägt den Typ in das Lexikon bekannter Typen ein.

Ein typedef kann Typen erstellen, während die using-Klausel lediglich einen Alias ​​für einen bereits bekannten Typ erstellt.

In Ihrem Beispiel handelt es sich um eine Unterscheidung ohne Unterschied, die sich jedoch möglicherweise nicht ohne Weiteres für zugeordnete Typen wie Zeiger, Verweise usw. übersetzen lässt.

Ich würde davon abraten, einen solchen Alias ​​oder ein solches typedef zu verwenden, da es sehr wenig aussagekräftig ist und es bereits viele akzeptable Alternativen gibt, wie z

int64_t
uint32_t

[| u] intN_t

verkohlen

int

schweben

Sie erhalten diese und alle MAX- und MIN-Konstanten, indem Sie cstdint einschließen.

#include 

(stdint.h)


Antwort 2:

Es gibt keinen Unterschied in der Bedeutung. Der Standard ([dcl.typedef]) sagt:

Ein typedef-Name kann auch durch eine Alias-Deklaration eingeführt werden. Der Bezeichner nach dem Schlüsselwort using wird zu einem typedef-Namen, und der optionale Attributbezeichner seq nach dem Bezeichner bezieht sich auf diesen typedef-Namen. Es hat die gleiche Semantik, als ob es vom Typedef-Bezeichner eingeführt worden wäre.

Die Deklaration mit ll = long long; ist eine Alias-Deklaration.