web-dev-qa-db-ja.com

C ++印刷ブール値、何が表示されますか?

boolを次のような出力ストリームに出力します。

#include <iostream>

int main()
{
    std::cout << false << std::endl;
}

標準ではストリームに特定の結果が必要ですか(例:0 for false)?

30
user788171

標準ストリームには、表示される内容を決定する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
87
Jerry Coffin

0が印刷されます。

C++の場合と同様true1およびfalseはを指します。

場合には、の代わりにfalseを印刷したい場合は、 strストリームのboolalpha形式フラグを設定する必要があります。

Boolalpha形式フラグが設定されている場合、bool値はそのテキスト表現によって挿入/抽出されます:整数値ではなく、trueまたはfalse。

#include <iostream>
int main()
{
  std::cout << std::boolalpha << false << std::endl;
}

output

false

[〜#〜] ideone [〜#〜]

17
ritesh_NITW