bool
を次のような出力ストリームに出力します。
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
標準ではストリームに特定の結果が必要ですか(例:0
for false
)?
標準ストリームには、表示される内容を決定するboolalpha
フラグがあります。falseの場合、0
および1
として表示されます。 trueの場合、false
およびtrue
として表示されます。
フラグを設定するstd::boolalpha
マニピュレーターもあります。
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"\n";
std::cout << std::boolalpha;
std::cout<<false<<"\n";
return 0;
}
...次のような出力を生成します:
0
false
価値があるものとして、boolalpha
がtrueに設定されている場合に生成される実際のWordはローカライズされています。つまり、<locale>
には数値変換を処理するnum_put
カテゴリがあります。適切なロケールでストリームを送信すると、true
およびfalse
がそのロケールで表されているとおりに出力できます。例えば、
#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;
}
...そして少なくとも理論的には(コンパイラ/標準ライブラリが "fr"を "French"の識別子として受け入れると仮定すると)faux
の代わりにfalse
を出力するかもしれません。ただし、これに対する真のサポートはせいぜい不均一であり、Dinkumware/Microsoftライブラリ(この点では通常非常に良い)でさえ、チェックしたすべての言語に対してfalse
を出力します。
ただし、使用される名前はnumpunct
ファセットで定義されているため、特定の言語で正しく印刷したい場合は、numpunct
ファセットを作成してください。たとえば、フランス語では少なくとも合理的に正確なものは次のようになります。
#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;
}
結果は次のとおりです(おそらく予想どおり)。
0
faux
0が印刷されます。
C++の場合と同様trueは1およびfalseはを指します。
場合には、の代わりにfalseを印刷したい場合は、 strストリームのboolalpha形式フラグを設定する必要があります。
Boolalpha形式フラグが設定されている場合、bool値はそのテキスト表現によって挿入/抽出されます:整数値ではなく、trueまたはfalse。
#include <iostream>
int main()
{
std::cout << std::boolalpha << false << std::endl;
}
output:
false