C ++ 14 fügt die Möglichkeit hinzu, binäre Literale zu verwenden, indem Sie das Präfix 0b
für den Wert eingeben:
Aber es gibt keinen std::bin
Manipulator für Streams wie std::hex
oder std::oct
. Also muss ich z.B. std::bitset
zum Drucken:
Wurde es vorgeschlagen oder in Betracht gezogen? Wenn ja, wie ist der Status der Idee?
Soweit ich weiß, wurde kein Vorschlag zum Hinzufügen eines Formatierungs-Flags zum Hinzufügen einer binären Formatierung und / oder eines Manipulators std::bin
eingereicht. Sie können die Vorschläge unter Ссылка überprüfen. Ich bin mir ziemlich sicher, dass der Vorschlag, Binärliterale hinzuzufügen, diese Möglichkeit nicht hinzugefügt hat (eine Schnellsuche ergab, dass N3472 , aber ich bin mir nicht sicher, ob dies die neueste Version der Arbeit ist.
Aus technischer Sicht ist es vielleicht nicht ganz einfach hinzuzufügen! Die verschiedenen Flags sind normalerweise alle in nur einem Wort in der Stream-Klasse gespeichert, und es gibt verschiedene Gründe, alle Bits zu verwenden. Die vorhandenen drei Einstellungen ( std::ios_base::oct
, std::ios_base::dec
, std::ios_base::hex
) können in nur 2 Bit gut gespeichert werden. Natürlich würden die drei Werte einen Wert offen lassen, außer dass dieser Wert typischerweise für die Standardeinstellung genommen wird, d. H. Die Basis beim Lesen nicht fixiert. Als Folge kann es notwendig sein, das Layout der Stream-Klassen zu ändern oder die Verarbeitung weniger effizient zu machen (z. B. indem irgendwie ein iword()
verwendet wird, um die zusätzliche Möglichkeit der binären Formatierung zu speichern). Ich habe die Analyse nicht gemacht, ob es ein tatsächliches Problem mit irgendwelchen der Implementierungen gibt (ich weiß, dass es keine für meine Implementierung gibt, aber ich habe alle Bits in einem Wort verwendet, wenn ich mich richtig erinnere).
Wenn Sie die binäre Formatierung unterstützen möchten, ist es relativ einfach, sie über eine benutzerdefinierte std::num_put<char>
-Facette hinzuzufügen. Unten ist ein einfaches Beispiel. Einige Formatierungsoptionen, wie z. B. Füllzeichen oder Dezimaltrennzeichen, werden nicht behandelt:
Tags und Links c++ language-lawyer c++14 binary