私はこのような出力ストリームにbool
を印刷:C++の印刷ブール値、何が表示されますか?
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
は標準ストリーム(false
ため例えば0
)上の特定の結果を必要としていますか?
私はこのような出力ストリームにbool
を印刷:C++の印刷ブール値、何が表示されますか?
#include <iostream>
int main()
{
std::cout << false << std::endl;
}
は標準ストリーム(false
ため例えば0
)上の特定の結果を必要としていますか?
標準ストリームには、何が表示されるかを決定するフラグboolalpha
があります。偽の場合、0
と1
と表示されます。それが真実であれば、false
とtrue
と表示されます。
ありフラグを設定するstd::boolalpha
マニピュレータもありますので、この:boolalpha
があるときに生成何が価値があるのは、実際の単語について
0
false
:
#include <iostream>
#include <iomanip>
int main() {
std::cout<<false<<"\n";
std::cout << std::boolalpha;
std::cout<<false<<"\n";
return 0;
}
が...のような出力を生成trueに設定されているのはローカライズされています。つまり、数字の変換を処理するnum_put
カテゴリがあります。したがって、正しいロケールでストリームにインプレッションを設定すると、true
と彼らがそのロケールで表現しているように。例えば、
#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」を受け入れる)それは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
注:std :: boolalphaを使って" true "または0または1の代わりに "false"を指定すると、std :: noboolalphaを使って反対側の(0または1を印刷する)ことができます –
'new'はメモリリークですか? – Creep4Play
@ Creep4Play:いいえ - デフォルトでは、ロケールの所有権をロケールに与えているため、ロケールが破棄されたときに自動的に破棄されます。 –
0意志印刷されます。
C++のよう真 とに偽を指すを指します。場合
、あなたは偽の代わりに、を印刷したい場合、あなたはstrのストリームのためのboolalphaフォーマットフラグを設定する必要があります。
boolalpha形式フラグが設定されている場合、ブール値は、整数値の代わりにtrueまたはfalseのテキスト表現で挿入/抽出されます。
#include <iostream>
int main()
{
std::cout << std::boolalpha << false << std::endl;
}
出力:
false
は、なぜあなたはそれを試してみませんか? –
これを閉じるにはどうすればいいですか? –
ヒント:すべての準拠のコンパイラで同じことを保証します。 – chris