U C ++, koja je razlika između "koristeći ll = long long" i "typedef long long ll"?


Odgovor 1:

Prvo je alias tipa, a drugo je definicija tipa.

Nadimak tipa jednostavno zamjenjuje vrstu u izvornoj kompilaciji.

Typedef unosi tip u leksikon poznatih tipova.

Typedef može kreirati tipove, dok upotreba klauzule samo stvara pseudonim za već poznati tip.

U vašem primjeru to je razlika bez razlike, ali ne može se lako prevesti za pridružene tipove poput pokazivača, referenci itd.

Ja bih savjetovao da ne koristite takav pseudonim ili typedef jer je vrlo neinformativan i postoje mnogi prihvatljivi već oko alternativa kao što su

int64_t
uint32_t

[| U] intN_t

čađ

int

plutati

dobivate ove i sve MAX i MIN konstante uključivanjem cstdint.

#include 

(stdint.h)


Odgovor 2:

Nema nikakve razlike u značenju. Standard ([dcl.typedef]) kaže:

Typedef-ime se također može uvesti alias-deklaracijom. Identifikator koji koristi sljedeću ključnu riječ postaje typedef-ime, a neobavezna specifikacija-atribut-seq koja slijedi da identifikator pripada tom typedef-imenu. Ima istu semantiku kao da ju je uneo specifikator typedef.

Deklaracija pomoću ll = long long; je alias-deklaracija.