布尔变量用于循环和条件
boolean variables for loops vs conditions
下面是我的代码:
int main()
{
int input;
bool isZero = false;
while (!isZero)
{
...
if (0 == input)
{
isZero = true;
}
else
{
isZero = false;
}
}
return 0;
}
程序做它应该做的,但我觉得!isZero表达式不是万无一失的。
bool isZero = false;
while(!isZero);
{
....
}
与
相同bool isZero = false;
while(isZero == false)
{
...
}
为什么或为什么不?同样,在哪些情况下true代表1,在哪些情况下它代表任何非零数字?
While要求条件为布尔值,而!isZero
已经是布尔值。相等运算符生成一个布尔值,所以isZero == false
也是一个布尔值。所以你唯一改变的是添加另一个操作符并(可能)减慢循环速度(事务比较比位操作符慢)。
对布尔值的操作类似于对整数值的操作。然后,您的关注点可以转化为整数:"嘿,x == 1
不是万无一失的,我必须检查,x - 1 == 0
是否"。
底线是,!isZero
绝对是万无一失的。
对于int型到bool型的转换,标准规定:
算术、无作用域枚举、指针或指向成员类型的指针的右值可以转换为bool类型的右值。零值、空指针值或空成员指针值被转换为false;任何其他值都被转换为true。对于直接初始化(8.5),std::nullptr_t类型的右值可以转换为bool类型的右值;结果值为false。
c++对条件的要求非常宽松。它接受布尔值,它将隐式地将任何整数转换为布尔值(其中0为假,非零为真),它还将隐式地将任何指针转换为布尔值(因为指针是无符号整数)。在这种情况下,NULL将为假,其他指针将为真)。因此,下列语句的值都为true,因此while语句将执行。
int i = 4;
char c = '0';
bool b = true;
void * p = 0xdeadbeef;
while (i) // ...
while (c) // ...
while (b) // ...
while (p) // ...
而下面的语句不会求值为true,因此While语句不会执行。
int i = 0;
char c = ' ';
bool b = false;
void * p = NULL;
while (i) // ...
while (c) // ...
while (b) // ...
while (p) // ...
根据c++,这些都是允许的。
当您在表达式中查看布尔值时,在其上放置==
运算符是多余的。不管上面的b
是真还是假,说while (b)
是完全有意义的,你不需要while (b == true)
。至于其他的,每个程序员都有自己的选择。我个人的偏好是显式地比较所有非布尔值。语句int i = 5; while (i)
在c++中可能是合法的,但它读起来并不清楚。我更愿意看int i = 5; while (i != 0)
。这是不必要的,但不会花费您任何额外的处理器操作,并且对于其意图是明确的。
- 如何在for循环中包含两个索引值的测试条件
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 在循环条件 i<sqrtN(预先计算)和 i*i<N 中,C++哪个更有效?
- 尽管条件为真,循环仍停止
- 为什么我不能在 for 循环中出现这样的条件?(C++)
- C++ 即使不满足条件,循环也会终止
- 具有迭代器和自定义步长的循环结束条件
- 有没有办法在循环中的条件至少满足一次时运行语句?
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 虽然循环即使应用了错误条件也不会退出
- 当循环在条件C++之前停止工作时
- Leetcode C++用于循环条件
- 当满足条件时,While循环未结束
- 对于检查 >=0 终止条件时的循环索引类型
- 调用以条件循环(c++)
- 使用布尔条件c++循环时无法退出
- 在条件C++循环语句中向SQLite3表中插入条目