相关疑难解决方法(0)

是否要求短路逻辑运营商?和评估顺序?

ANSI标准是否要求逻辑运算符在C或C++中被短路?

我很困惑,因为我记得K&R的书说你的代码不应该依赖于这些操作被短路,因为它们可能没有.有人可以指出标准中的哪个位置逻辑操作始终是短路的吗?我最感兴趣的是C++,C的答案也很棒.

我还记得读(不记得在哪里)评估顺序没有严格定义,所以你的代码不应该依赖或假设表达式中的函数将按特定的顺序执行:在语句的末尾所有引用的函数将被调用,但编译器可以自由选择最有效的顺序.

标准是否表明该表达式的评估顺序?

if( functionA() && functionB() && functionC() ) cout<<"Hello world";
Run Code Online (Sandbox Code Playgroud)

c c++ operator-precedence short-circuiting logical-operators

137
推荐指数
5
解决办法
3万
查看次数

后增量和预增量概念?

我不明白后缀和前缀增量或减量的概念.谁能给出更好的解释?

c++ conceptual pre-increment post-increment

66
推荐指数
6
解决办法
11万
查看次数

C编程语言中&&的行为

我是C编程语言的初学者,最近我读过有关Logical AND &&运算符的内容.

我也知道,在C编程语言中,所有非零值都被视为TRUE.

NON-ZERO && NON-ZERO = 1  
NON-ZERO && ZERO = 0  
ZERO && NON-ZERO = 0
ZERO && ZERO = 0  
Run Code Online (Sandbox Code Playgroud)

但是当我处理以下程序时,我没有得到预期的答案.

int main(){  
  int x, y, z;  
  x = y = z = -1;  
  y = ++x && ++y && ++z;  
  printf("x = %d, y = %d, z = %d, x, y, z);  
  return 0;  
} 
Run Code Online (Sandbox Code Playgroud)

我期待着

x = 0, y = 0, z = 0 
Run Code Online (Sandbox Code Playgroud)

但答案是

x = 0, y = 0, …
Run Code Online (Sandbox Code Playgroud)

c operators logical-operators

22
推荐指数
4
解决办法
9764
查看次数