2015-09-15 9 views
6

Quali garanzie ha il C++ sull'ordinamento dei caratteri letterali? Esiste un ordinamento preciso di caratteri nel set di caratteri di origine ? (Ad esempio, è 'a' < 'z' garantita per essere vero? Che ne dite di 'A' < 'z'?)Quali garanzie ha il C++ sull'ordinamento dei caratteri letterali?

+0

Un'implementazione davvero malvagia potrebbe avere "'z' == 'a' + 25' e _still_ avere' 'b' <'a''. Credo che questo sia piuttosto sottodescritto, anche tenendo conto di EBCDIC e SMS. – MSalters

+1

Il fatto che non ci sia alcuna garanzia dimostra ancora una volta che a volte è una buona idea dare il proprio supporto ad alcune implementazioni, che possono essere "più". Un buon esempio a mio parere è che Qt si attenga alle implementazioni che hanno 'sizeof (int) == 4' ... Tutti i compilatori che vogliono supportare lo garantiscono, ma ovviamente non tutti, ma se ci si limita a tali implementazioni, può rendere la vita molto più facile. Tuttavia, devi stare attento e conoscere le implementazioni a cui ti stai attenendo, oltre a considerare una tale limitazione dipendente dall'applicazione, ovviamente. – leemes

risposta

10

Lo standard fornisce solo una garanzia per l'ordinazione delle cifre decimali 0 a 9, dal progetto di C++ 11 sezione standard 2.3[lex.charset]:

sia la sorgente e l'esecuzione set di caratteri di base, il valore di ogni carattere dopo 0 nell'elenco precedente di cifre decimali è uno maggiore del valore del precedente.

ed al contrario dice (sottolineatura mia):

Il set di caratteri esecuzione di base e la base set di caratteri estesi esecuzione devono essere dotate di tutti i membri del set di caratteri fonte di base, più caratteri di controllo che rappresentano avviso, backspace e ritorno a capo, oltre a un carattere null (rispettivamente, carattere di larghezza nullo), la cui rappresentazione ha tutti i bit zero. Per ciascun set di caratteri di esecuzione di base , , i valori dei membri devono essere non negativi e distinti l'uno dall'altro.

Nota, EBCDIC ha un set di caratteri non consecutivi.

Problemi correlati