我有我冒充多为我的好奇一个简单的问题。

什么是这两行代码之间的差异? (在C ++)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)

的条件的选择是完全任意的,我在之间的差别只是感兴趣,和&&。

我不是一个初学者以任何方式编码,但我从来没有与逗号操作困扰。

是否有性能/行为的差异或者是纯美学?

最后一点,我知道有更大的性能比鱼有条件的运营商来炒,但我只是好奇。放纵我。

修改的 谢谢您的回答。

原来,促使这个问题的人滥用了逗号操作中我所描述的方法的代码。我不知道有什么不同,为什么它不是一个&&运算符,但它只是写不正确。我没觉得什么是错的,因为它的工作就好了。感谢矫直我。

有帮助吗?

解决方案

尽管它看起来像它,

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++) 

是不等价的。

下面是证明。

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

结果:

5

这意味着,所述确定当环路将退出它将使用N > 0时。 如果N = 10,这意味着它永远是真实和循环将永远不会退出。

运行此,看到了证明。

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}

bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

如果N是不循环内改变一个恒定的或可变 然后你可以只通过检查一次第一,即去掉N > 0检查。

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

其他提示

使用一个这样的逗号将简单的丢弃所述第一条件

逗号操作符的意思是“运行的顺序这些语句中,并采取最后一个的值”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top