C 与&;逻辑关联的for循环中的多个测试条件&;
例如:C 与&;逻辑关联的for循环中的多个测试条件&;,c,for-loop,logical-operators,C,For Loop,Logical Operators,例如: for(j=0;t1&&t2&&t3;j++); 如果t1失败,for循环是否会检查t2和t3?逻辑上不需要检查,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的t2和t3条件,并假设它们在循环的每个周期都发生。逻辑上不需要,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的t2和t3条件,并假设它们在循环的每个周期都
for(j=0;t1&&t2&&t3;j++);
如果t1失败,for循环是否会检查t2和t3?逻辑上不需要检查,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的
t2
和t3
条件,并假设它们在循环的每个周期都发生。逻辑上不需要,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的t2
和t3
条件,并假设它们在循环的每个周期都在发生。对于(j=0;(t1&&t2)&&(t2&&t3);j++;//应该有用
误读了这个问题。不,不会的。C使用短路评估,这意味着一旦它为假,它就为假。对于(j=0;(t1&&t2)&&&(t2&&t3);j++);//应该有用
误读了这个问题。不,不会的。C使用短路评估,这意味着一旦它为假,它就为假。否,如果您有(值和任何值)且值变为假,则忽略所有其他内容。否,如果您有(值和任何值)在
循环的中,以及在使用&&
或|
的所有其他情况下,计算从左到右进行,直到知道答案。这时,评估停止了。这就是所谓的短路
这是一个非常重要的特性,因为它允许您通过在前面插入检查来“保护”后续表达式。比如说,
if (ptr != 0 && ptr->property == 42) {
}
不会仅因为短路而在ptr==NULL
上崩溃。如果没有它,程序员将被迫写得不那么愉快
if (ptr != 0) {
if (ptr->property == 42) {
}
}
为避免崩溃。在<代码>中,对于
循环,以及在使用<代码>&&
或<代码>|的所有其他情况下,评估从左到右进行,直到知道答案。这时,评估停止了。这就是所谓的短路
这是一个非常重要的特性,因为它允许您通过在前面插入检查来“保护”后续表达式。比如说,
if (ptr != 0 && ptr->property == 42) {
}
不会仅因为短路而在ptr==NULL
上崩溃。如果没有它,程序员将被迫写得不那么愉快
if (ptr != 0) {
if (ptr->property == 42) {
}
}
<>避免碰撞。< / P> < P>不,C和C++保证条件的“短路”,即“测试”一旦条件被确定就停止(如果对于代码>和代码>有错误的话,那么它就确定它永远不能是代码>真< /代码>,如果某个东西是<代码>真< /代码>,在<代码> < <代码>中,这不可能是假的
这样可以安全地执行以下操作:
if (ptr != NULL && ptr->x > 10) ...
< >不,C和C++保证条件的“短路”,即“测试”一旦条件被确定就停止(如果对于代码>和代码>有什么是错误的,那么它就确定它永远不能是代码>真< /COD>,并且如果某个东西是<代码>真< /COD> > < <代码> <代码>,它不能是假。p>
这样可以安全地执行以下操作:
if (ptr != NULL && ptr->x > 10) ...
C将短路包含逻辑and和OR的表达式,因此一旦知道表达式的结果,计算将停止。给出的表达式是:
t1 && t2 && t3
由于它是一个逻辑AND运算符,一旦t1被评估为false,就会跳过t2和t3的评估,因为整体结果是已知的 C将短路包含逻辑and和OR的表达式,因此一旦知道表达式的结果,计算将停止。给出的表达式是:
t1 && t2 && t3
由于它是一个逻辑AND运算符,一旦t1被评估为false,就会跳过t2和t3的评估,因为整体结果是已知的 来自(这是一个相当新的草案版本,但该特定段落自ANSI-C草案以来一直存在)
与按位二进制&运算符不同,&&运算符保证
从左到右评价;有一个序列点在
第一个操作数的求值如果第一个操作数比较相等
如果设置为0,则不计算第二个操作数
强调我的观点,所以是的,编译器必须在遇到操作数时立即短路逻辑and条件,从而使其返回0。来自(这是一个相当新的草案版本,但自ANSI-C草案以来,这一特定段落一直存在)
与按位二进制&运算符不同,&&运算符保证
从左到右评价;有一个序列点在
第一个操作数的求值如果第一个操作数比较相等
如果设置为0,则不计算第二个操作数
强调我的,所以是的,编译器必须在遇到操作数时立即短路逻辑and条件,从而使其返回0。请参阅。请参阅。