循环条件的性能差异?

时间:2009-07-07 21:13:10

标签: c++ loops logical-operators comma-operator

我有一个简单的问题,我主要是因为我的好奇。

这两行代码之间有什么区别? (在C ++中)

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

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

条件的选择完全是随意的,我只是对和&amp;&amp;之间的差异感兴趣。

我不是一个以任何方式编码的初学者,但我从不打扰逗号运算符。

是否存在性能/行为差异或纯粹是美学?

最后一点,我知道有一个比条件运算符更好的性能鱼,但我只是好奇。放纵我。

修改的 谢谢你的回答。

事实证明,提示这个问题的代码以我描述的方式滥用了逗号运算符。我想知道它的区别是什么,为什么它不是&amp;&amp;运算符,但它只是写得不正确。我觉得它没有任何问题,因为它运作得很好。谢谢你把我拉直了。

2 个答案:

答案 0 :(得分:33)

使用这样的逗号只需放弃第一个条件

逗号运算符表示“按此顺序运行这些语句,并获取最后一个语句的值”。

答案 1 :(得分:10)

虽然它看起来像,

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++)
   ...
}
相关问题