long
e long int
sono identici. Così sono long long
e long long int
. In entrambi i casi, int
è facoltativo.
Per quanto riguarda la differenza tra i due insiemi, lo standard C ++ impone intervalli minimi per ciascuno, e questo long long
è almeno altrettanto ampio long
.
Le parti di controllo dello standard (C ++ 11, ma questo esiste da molto tempo) sono, per esempio 3.9.1 Fundamental types
, la sezione 2 (una sezione successiva fornisce regole simili per i tipi integrali senza segno):
Esistono cinque tipi di numeri interi con segno standard: carattere con segno, int breve, int, long int e long long int. In questo elenco, ogni tipo fornisce almeno lo stesso spazio di archiviazione di quelli che lo precedono nell'elenco.
C'è anche una tabella 9 in 7.1.6.2 Simple type specifiers
, che mostra i "mapping" degli specificatori ai tipi effettivi (mostrando che int
è facoltativo), una sezione della quale è mostrata di seguito:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
Nota la distinzione tra lo specificatore e il tipo. Lo specificatore è il modo in cui dici al compilatore di che tipo è ma puoi usare diversi specificatori per finire con lo stesso tipo.
Quindi long
da solo non è né un tipo né un modificatore come pone la tua domanda, è semplicemente un identificatore per il long int
tipo. Idem per long long
essere un identificatore per il long long int
tipo.
Sebbene lo standard C ++ stesso non specifichi gli intervalli minimi di tipi integrali, cita C99, in 1.2 Normative references
, come applicabile. Pertanto, C99 5.2.4.2.1 Sizes of integer types <limits.h>
sono applicabili le gamme minime indicate in .
In termini di long double
, questo è in realtà un valore in virgola mobile piuttosto che un numero intero. Analogamente ai tipi integrali, è necessario avere almeno la stessa precisione di a double
e fornire un superset di valori rispetto a quel tipo (ovvero almeno quei valori, non necessariamente più valori).