A C ++ esetében mi a különbség a "ll = hosszú hosszú" és a "typedef hosszú hosszú ll használata" között?


Válasz 1:

Az első egy típus álnév, a második pedig a típus meghatározása.

Egy típus álnév egyszerűen helyettesíti a típust a forrásösszeállításban.

A typedef beírja a típust az ismert típusok lexikonjába.

A typedef típusokat hozhat létre, míg a használati záradék csupán álnevet hoz létre egy már ismert típus számára.

Példájában ez különbségtétel nélküli megkülönböztetés, de előfordulhat, hogy a társított típusok, például mutatók, referenciák stb.

Azt tanácsolnám, hogy ne használjunk ilyen álnevet vagy typedef-et, mivel ez nagyon nem informatív, és már számos alternatíva elfogadható az alternatívák, például a

int64_t
uint32_t

[| U] intN_t

faszén

int

úszó

ezeket és az összes MAX és MIN állandót megkapja a cstdint beírásával.

#include 

(stdint.h)


Válasz 2:

A jelentésben nincs különbség. A szabvány ([dcl.typedef]) szerint:

A typedef-név egy álnév-deklarációval is bevezethető. A kulcsszót követő azonosító typedef -névé válik, és az azonosítót követő opcionális attribútum-specificier-seq az adott typedef-névhez tartozik. Ugyanaz a szemantikája, mintha a typedef specifikátor vezetné be.

A nyilatkozatot ll = hosszú hosszú; egy álnév-nyilatkozat.