gpt4 book ai didi

C++打印 boolean 值,显示什么?

转载 作者:IT老高 更新时间:2023-10-28 12:46:22 30 4
gpt4 key购买 nike

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

#include <iostream>

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

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

最佳答案

标准流有 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;
}

...产生如下输出:

0
false

对于它的值(value),boolalpha 时产生的实际单词设置为 true 是本地化的 - 即 <locale>有一个 num_put处理数字转换的类别,因此如果您使用正确的语言环境填充流,它可以/将打印出 truefalse因为它们在该语言环境中表示。例如,

#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

关于C++打印 boolean 值,显示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960015/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com