Die Standardstreams haben ein boolalpha
Flag, das bestimmt, was angezeigt wird - wenn es falsch ist, werden sie als 0
und 1
angezeigt. Wenn dies der Fall ist, werden sie als false
und true
angezeigt.
Es gibt auch ein std::boolalpha
Manipulator das Flag zu setzen, so dass dies:
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"\n";
std::cout << std::boolalpha;
std::cout<<false<<"\n";
return 0;
}
... erzeugt eine Ausgabe wie:
0
false
Für das, was es wert ist, das erzeugte tatsächliche Wort, wenn boolalpha
ist Satz auf true lokalisiert ist - das heißt, <locale>
hat eine num_put
Kategorie, die numerischen Konvertierungen behandelt, so dass, wenn Sie einen Stream mit der rechten locale tränken kann/wird true
ausdrucken und false
, wie sie in diesem Gebietsschema dargestellt werden. Zum Beispiel
#include <iostream>
#include <iomanip>
#include <locale>
int main() {
std::cout.imbue(std::locale("fr"));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
... und zumindest in der Theorie (vorausgesetzt, Ihr Compiler/Standard-Bibliothek „fr“ als Kennung für „Französisch“ akzeptieren) könnte es faux
statt false
ausdrucken. Ich sollte jedoch hinzufügen, dass die tatsächliche Unterstützung dafür bestenfalls uneinheitlich ist - sogar die Dinkumware/Microsoft-Bibliothek (normalerweise ziemlich gut in dieser Hinsicht) druckt false
für jede Sprache, die ich überprüft habe.
Die Namen, die verwendet werden, sind in einer numpunct
Facette definiert, also wenn Sie wirklich wollen, dass sie richtig für bestimmte Sprache ausdrucken, können Sie eine numpunct
Facette erstellen, um dies zu tun. Zum Beispiel eine, die (ich glaube) zumindest einigermaßen genau für Französisch würde wie folgt aussehen:
#include <array>
#include <string>
#include <locale>
#include <ios>
#include <iostream>
class my_fr : public std::numpunct<char> {
protected:
char do_decimal_point() const { return ','; }
char do_thousands_sep() const { return '.'; }
std::string do_grouping() const { return "\3"; }
std::string do_truename() const { return "vrai"; }
std::string do_falsename() const { return "faux"; }
};
int main() {
std::cout.imbue(std::locale(std::locale(), new my_fr));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
Und das Ergebnis ist (wie Sie wahrscheinlich erwarten würde):
0
faux
Warum versuchen Sie es nicht aus? –
Wie sollen wir diese schließen? –
Hinweis: Es wird garantiert, dass auf jedem konformen Compiler dasselbe ausgegeben wird. – chris