Warum war das Leerzeichen nicht gewählt für C++14-stellige Separatoren?

Als von C++14, Dank n3781 (die in sich selbst keine Antwort auf diese Frage) vielleicht schreiben wir einen code wie den folgenden:

const int x = 1'234; //one thousand two hundred and thirty four

Ziel ist die Verbesserung der code wie dieser:

const int y = 100000000;

und machen es besser lesbar.

Den Unterstrich (_) Charakter war bereits im C++11, die durch benutzerdefinierte Literale, und das Komma (,) hat die Lokalisation Probleme — viele Europäische Länder verblüffend verwenden Sie diese als Dezimaltrennzeichen und Konflikte mit dem Komma-operator, obwohl ich Frage mich, was die real-world-code könnte möglicherweise gebrochen worden, indem z.B. 1,234,567.

Sowieso eine bessere Lösung zu sein scheint, die dem Raum Charakter:

const int z = 1 000 000;

Diese angrenzenden numerischen literalen Token können verkettet werden, indem der Präprozessor nur so sind string-Literale:

const char x[5] = "a" "bc" "d";

Statt, wir bekommen das Apostroph ('), die nicht von jedem system schreiben, ich bin mir dessen bewusst, als eine Ziffer separator.

Gibt es einen Grund, dass der Apostroph gewählt wurde statt eines einfachen Raum?


Es ist unverständlich, da alle diese Sprachen, die im text an, pflegen Sie die Vorstellung von einem Komma, "zerreißen" einem sonst atomaren Satz mit einem Punkt funktionieren "kündigen" der Satz — für mich zumindest, dies ist ganz Analog zu einem Komma "auseinander bricht" den ganzzahligen Teil einer Zahl und einem Punkt "beenden" ist es bereit für die Bruch-Eingang.

  • In Bezug auf das Komma, ist das nicht das Problem der Komma-operator, sondern als Lokalisierungs-Probleme?
  • Da schlage ich vor in der Frage, obwohl dies mag wahr sein, kann ich mir nicht vorstellen, dass es eine real-world-code, der tatsächlich gebrochen wurde, durch solch einen Konflikt. Wer schreibt 1,000,000 und könnte erwarten, etwas anderes als die Verkettung derjenigen, Literale, in der Realität? Der nächste, den ich bekommen kann, ist foo()*3, 4, 5 aber ich denke, erfordern Klammern um den ersten Ausdruck zumutbar ist. Weil es albern code in den ersten Platz.
  • Ah, ich vergaß ein paar Worte. Ich hab meine für die Hälfte-Satz kurz-Adresse der Komma-operator.
  • Ich so oft zu hören, dass "whitespace ist egal!" oder "wird ignoriert!" - wäre schön wenn das ein bißchen wahrer!
  • Ich nehme an, niemand ändern soll die Bedeutung von int a[] = {123,000,000}. Für das Komma versus Zeitraum Unterscheidung, beachten Sie, dass diese vor kurzem standardisiert - sowohl in text und zahlen.
  • Autsch, das ist ein gutes Beispiel. re ", das kürzlich standardisierte" was meinst du? Ich bin mir nicht bewusst jede Sprache, die sich verändert hat in den letzten Speicher, und sicherlich nicht erst seit 1998.
  • Ich meinte eigentlich Ihre Verwendung in der Sprache geschrieben, die zufällig im 19.Jahrhundert.
  • Richtig, das ist, warum ich bin verwirrt, als die Relevanz der Tatsache, dass, weil der 19th Jahrhundert, etwas älter als C++.
  • Der Kommentar wurde in Bezug auf die Fußnote und nicht-englischen Sprachen. Die Frist war bereits im Einsatz als Gruppen-Trennzeichen in Datumsangaben, z.B. IV.I.MMXV heute ist.
  • Ich interpretiere das anders als du. Diese Fristen betragen in der Abgrenzung der drei unterschiedlichen Bereichen (als der Zeitraum, in Englisch 123.45 grenzt integral und fractional); dies ist eine andere Funktion hat als das gedient, Tausender-Trennzeichen, die rein ästhetische, sondern als semantische im Einsatz. Als solche, Ihre würde-werden Gegenbeispiel ist nur ein weiteres Beispiel, warum das moderne Englisch Komma als Tausender-Trennzeichen sinnvoll ist (über die Verwendung einer Frist für die selbe Sache) und hat getan, da vor dem 19. 🙂
  • Es gibt keinen "Sinn" davon. Dezimal-Trennzeichen ist sicherlich nicht vollständig zum Stillstand gekommen ist; mit einem Komma würde wahrscheinlich die meisten "vernünftigen". Aber diese sind rein Schriftsatz-Konventionen, die im Laufe der Zeit entwickelt, unterschiedlich in den verschiedenen "locales", und als MSalters Punkte heraus, nur standardisierte vor kurzem.
  • Der 1800er ist wohl kaum "vor kurzem", obwohl ich zugeben, dass solche Dinge relativ sind.
  • Neben der technischen Punkte, die Sie sagen, dass das Apostroph ('), [ist] nicht von jedem system schreiben, ich bin mir dessen bewusst, als eine Ziffer separator. Es ist ein Land, mit dem Apostroph als digit separator: Schweiz. Ich habe auch gesehen, dass es in Fällen, in denen der Autor liebt es mehr oder ein Punkt/Komma würde zu Verwirrung führen, da Sie International unterschiedlich verwendet.
  • Wenn das macht Sie fühlen sich besser, ich bin Europäer und Dank der vielen Produkte, die hergestellt in den usa (Taschenrechner, etc.) mit Komma für dezimal-Werte ist - glücklicherweise - sehr langsam Herausfallen Geschmack. Ich würde sagen, 0.99 ist jetzt allgemein verwendet als 0,99; mit Kommas als Trennzeichen für Tausender ist unbekannt, obwohl, wie durch Punkte, die wir gerade nicht trennen lassen (wahrscheinlich, weil 1,234 und 1.234 beides bedeutet Dezimalzahlen heute)
  • Bezüglich der Verwendung des Kommas als Trennzeichen, könnte man überlegen, was (1,200) bedeutet -- es könnte bedeuten, 1200 oder 200, je nachdem, was Sie wollen, es zu Lesen, wenn das Komma verwendet, als Tausendertrennzeichen. Wieder, wie @AndreasBonini schreibt, dass es nicht verwendet werden, die oft in Europa.
  • Es tut sich etwas 😉
  • Ich hätte gedacht, das Problem mit dem Komma wäre die Mehrdeutigkeit im Falle von int foo(int);int foo(int,int); foo(1,000);
  • Gut, wir brauchen nur ein Unicode-Zeichen, das bedeutet insbesondere Ziffer Gruppierung.
  • Und einen entsprechenden Alternativen-Token-Repräsentation (digraph)! 😀
  • Für den Datensatz, der Apostroph ist standard digit separator notation auf Rechenmaschinen. (Verweis)
  • Nicht alle von Ihnen. Es gibt keine "standard".
  • Das ist der erste, den ich gesehen habe, ohne Apostrophe, und Google-Bilder-Suche scheint zu zeigen, die überwiegende Mehrheit der Verwendung. Zumindest ist es verantwortlich, die als gemeinsame Verwendung in solchen Maschinen, wenn wir vermeiden wollen wählerisch Wörter wie "standard".
  • Aus einem cursor Suche auf adding machine es sieht mehr aus wie halbe/halbe, nicht "die überwiegende Mehrheit".
  • Lettland zu verwendet ein Apostroph als Tausendertrennzeichen - oder zumindest so getan haben, als ich noch in der Schule. 😛 Es ist nicht etwas, die Sie Häufig verwenden.
  • Es ist eine große Beitrag auf der UX-Website, entnommen aus Wikipedia, zeigt, dass die Nutzung von Separatoren für verschiedene Länder. Wie es oft der Fall mit der Internationalisierung, es gibt mehr Varianten, als man erwarten würde, und es ist ziemlich viel Durcheinander! 🙂
  • Kommas kann geringer sein, Separatoren in Englisch geschrieben, aber algebraische Ausdrücke dots sind oft Optional platziert lediglich zu klären, die Grenzen zwischen dem Token, in der Erwägung, dass das Komma verwendet wird, trennen zwei unterschiedliche Elemente in einem paar. Betrachten a·sin(A) das ist das gleiche wie a(sin(A)), in der Erwägung, dass v = (2,3) ist sehr Verschieden von v = (2(3)). Trotzdem, logischen Ressourcen, um Präzedenzfall zu wählen zwischen Lokalisierungen nie wirklich geben uns die richtige Antwort.
  • Wahr genug.
  • In Bezug auf real-world-code mit Komma-operator zwischen den zahlen: Eigen::Matrix3f m; m << 1,2,3,4,5,6,7,8,9;. Siehe Eigen ist Komma-Initialisierung.
  • Aber das ist eigentlich eine verkettete Reihe von Funktionsaufrufen (jeweils mit einem Eigen Typ auf der LHS) und könnte definiert werden, um Vorrang vor einer "single" literal gefunden in einem Teilausdruck auf seine eigenen. Logisch die beiden unterschieden werden konnte, aber, zugegeben, es ist sonst nicht eindeutig, und die parsing-Phase können nicht wollen, zu haben, um zu arbeiten, aus.

Schreibe einen Kommentar