longe long intsono identici. Così sono long longe 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 longda solo non è né un tipo né un modificatore come pone la tua domanda, è semplicemente un identificatore per il long inttipo. Idem per long longessere un identificatore per il long long inttipo.
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 doublee fornire un superset di valori rispetto a quel tipo (ovvero almeno quei valori, non necessariamente più valori).