除0或1之外的整数的布尔值是多少?

dev*_*nut 3 c++ boolean

我正在编写一个简单的函数来根据一组应该命名为cam1_0.bmp,cam1_1.bmp的文件派生出一个新的文件名,然后尝试了这个.

static int suffix = 0;
std::string fPre("cam");
std::ifstream fs;
std::string fName;
do {
    fName = fPre;
    fName.append(std::to_string(camera)).append("_").append(std::to_string(suffix)).append(".bmp");
    fs.open(fName);
} while (fs.good() && ++suffix);
Run Code Online (Sandbox Code Playgroud)

这有效,它让我想知道对于0或1以外的数值,相应布尔值的标准定义行为是什么.通过本实验,我知道包括除0以外的负值的所有值都计算为true.根据标准,只有0被认为是假的吗?

Kei*_*son 13

在C++中,整数没有布尔值.(不同的语言有不同的规则,但这个问题是关于C++的.)

的结果转换为整数值输入bool(其通常隐式进行转换)被很好地定义.转换的结果0boolfalse; 将任何非零值转换为boolis的结果true.

这同样适用于浮点值(0.0转换为false,所有其他值转换为true)和指针(空指针转换为false,所有非空指针值转换为true).

  • 除了上述内容之外,值得注意的是“类型的默认值转换为‘false’”规则,尽管在其他一些语言中是这样,但在 C++ 中这只适用于基本的内置类型。特别是,wrt。转换为“bool”**空字符串**被视为衰减为的非空指针,因此它转换为“true”。而在例如 Python 中,它会转换为“False”。 (2认同)
  • 我不同意你的说法“整数没有布尔值”。首先,下面都是零和一,所以就机器而言没有区别。其次,有很多编程语言要么是弱类型的,要么*使用数字作为布尔值*,例如 M[umps];或者 - 无论好坏 - 支持从数字到布尔值的隐式转换,例如 C;或者简单地将所有内容视为“真实”或“虚假”,例如 JavaScript。 (2认同)