C++打印布尔值,显示什么?

use*_*171 32 c++ boolean cout

我打印bool到这样的输出流:

#include <iostream>

int main()
{
    std::cout << false << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是否标准要求的流(例如特定结果0false)?

Jer*_*fin 90

标准流有一个boolalpha标志,用于确定显示的内容 - 当它为假时,它们将显示为01.如果这是真的,他们将显示为falsetrue.

还有一个std::boolalpha操纵器来设置标志,所以这个:

#include <iostream>
#include <iomanip>

int main() {
    std::cout<<false<<"\n";
    std::cout << std::boolalpha;   
    std::cout<<false<<"\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...产生如下输出:

0
false
Run Code Online (Sandbox Code Playgroud)

对于它的价值,当boolalpha设置为true 时生成的实际单词是本地化的 - 也就是说,<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;
}
Run Code Online (Sandbox Code Playgroud)

...至少在理论上(假设你的编译器/标准库接受"fr"作为"法语"的标识符)它可能会打印faux而不是false.但是,我应该补充一点,对此的真正支持充其量是不均衡的 - 甚至Dinkumware/Microsoft库(在这方面通常相当不错)打印false我检查过的每种语言.

使用的名称numpunct虽然在facet 中定义,但是如果你真的希望它们能够针对特定语言正确打印,你可以创建一个numpunctfacet来做到这一点.例如,(我相信)法语至少相当准确的一个看起来像这样:

#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;
}
Run Code Online (Sandbox Code Playgroud)

结果是(正如你可能预期的那样):

0
faux
Run Code Online (Sandbox Code Playgroud)

  • 注意:当std :: boolalpha可用于启用打印"true"或"false"而不是0或1时,可以使用std :: noboolalpha执行相反的操作(再次打印0或1) (5认同)

rit*_*ITW 20

0将被打印.

与在C++中一样,true表示1,false表示0.

如果你想打印false而不是0,那么你必须为str流设置boolalpha格式标志.

当设置boolalpha格式标志时,bool值通过其文本表示插入/提取:true或false,而不是整数值.

#include <iostream>
int main()
{
  std::cout << std::boolalpha << false << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
Run Code Online (Sandbox Code Playgroud)

IDEONE