Ausgehend von einer Diskussion, die hier gestartet wurde, legt der Standard Werte für Zeichen fest? Also, ist '0'
garantiert 48? Das sagt uns ASCII, aber ist es garantiert? Wenn nicht, haben Sie einen Compiler gesehen, in dem '0'
nicht 48 ist?
Nein. Es ist nicht erforderlich, dass die Quell- oder Ausführungszeichensätze eine Codierung mit einer ASCII-Teilmenge verwenden. Ich habe keine Nicht-ASCII-Implementierungen gesehen, aber ich kenne jemanden, der jemanden kennt, der es hat. (Es ist erforderlich, dass '0' - '9' zusammenhängende ganzzahlige Werte haben, aber das ist eine doppelte Frage woanders auf SO.)
Die für den Quellzeichensatz verwendete Codierung steuert, wie die Bytes Ihres Quellcodes in die in der Sprache C ++ verwendeten Zeichen interpretiert werden. Der Standard beschreibt die Mitglieder des Ausführungszeichensatzes als Werte. Es ist die Codierung, die diese Zeichen ihren entsprechenden Werten zuordnet, die den ganzzahligen Wert von '0'
bestimmt.
Obwohl mindestens alle Elemente des grundlegenden Quellzeichensatzes plus einige Steuerzeichen und ein Nullzeichen mit dem Wert Null im Ausführungszeichensatz vorhanden sein müssen (mit entsprechenden Werten), gibt es Es ist nicht erforderlich, dass die Codierung ASCII ist oder ASCII-Werte für eine bestimmte Teilmenge von Zeichen (außer dem Nullzeichen) verwendet wird.
Es ist 0xF0
in EBCDIC. Ich habe noch nie einen EBCDIC-Compiler verwendet, aber mir wurde gesagt, dass sie eine Zeitlang bei IBM in Mode waren.
Es gibt keine Anforderung im C ++ - Standard, dass die Quell- oder Ausführungskodierungen ASCII-basiert sind. Es ist garantiert, dass '0' == '1' - 1
(und im Allgemeinen, dass die Ziffern zusammenhängend und in der Reihenfolge sind). Es ist nicht garantiert, dass die Buchstaben zusammenhängend sind, und zwar in EBCDIC 'J' != 'I' + 1
und 'S' != 'R' + 1
.
Nach C ++ 11 Standard N3225
Die Glyphen für die Mitglieder des grundlegenden Quellzeichensatzes sind soll Zeichen aus der Teilmenge von ISO / IEC 10646 identifizieren, die entspricht dem ASCII-Zeichensatz. Aufgrund der Zuordnung von Quelldateizeichen zum Quellzeichensatz (beschrieben in Übersetzungsphase 1) wird als implementierungsdefiniert bezeichnet, a Implementierung ist erforderlich, um die grundlegenden Quellzeichen zu dokumentieren werden in Quelldateien
dargestellt
Kurz gesagt, der Zeichensatz muss nicht der ASCII-Tabelle zugeordnet werden, obwohl ich noch nie von einer anderen Implementierung gehört habe