C++ 除0或1以外的整数的布尔值是多少?

C++ 除0或1以外的整数的布尔值是多少?,c++,boolean,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(suf

我正在编写一个简单的函数,根据一组文件(应命名为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);
这是可行的,它让我想知道除了0或1之外的数值对应的布尔值的标准定义行为是什么。通过这个实验,我知道所有值,包括除0以外的负值,计算结果都为真。根据标准,只有0被视为false吗?

值0(用于整数、浮点和非范围枚举)和空指针以及指向成员值的空指针变为false。所有其他值都变为真


在C++中,整数不具有布尔值。(不同的语言有不同的规则,但这个问题是关于C++)< /P> 将整数值转换为类型
bool
(通常隐式完成的转换)的结果定义良好。将
0
转换为
bool
的结果是
false
;将任何非零值转换为
bool
的结果为
true


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

是的,对于布尔值,除0以外的任何数字都视为true


请访问以获取一些解释。

是<代码> 0 是唯一的“FLUY”整数。除上述之外,值得注意的是,规则“类型的默认值转换为<代码> false <代码>”,尽管在其他一些语言中,C++中只有这样,这才是基本的内置类型。特别是,wrt。转换为
bool
空字符串被视为它衰减到的非空指针,因此它将转换为
true
。例如,在Python中,它会转换为
False
。我不同意你说的“整数没有布尔值”。首先,它下面都是0和1,所以就机器而言没有区别。其次,有很多编程语言要么是弱类型的,要么使用数字作为布尔值,比如M[umps];或者——无论好坏——支持从数字到布尔值的隐式转换,比如C;或者简单地将一切都视为“真实的”或“虚假的”,比如JavaScript。@Sildoreth:如果你愿意,你可能会不同意,但这就是确定标准的方式。不管怎样,C++的其他语言都不重要。”SeldRoth:问题是C++。这就是我回答的背景。我用“布尔”这个词专门引用C++类型<代码>布尔O/COD>,和“整数”来引用C++整数类型的值。任何类型的值,包括
bool
都表示为“所有1和0”,但问题不在于底层表示。C++标准明确地说明了<代码>中的条件:如果或<代码>而语句转换为<代码>布尔O/COD>。(例如,C标准并没有这样说;我对一个类似问题的回答标记为“C”会有很大的不同。)利用这个属性并如上所述使用它可以吗?或者,这可以被认为是不好的实践吗?虽然VB和C++在这种情况下行为相同,但不应该假定VisualBasic的行为与C++的行为有任何关系。