在循环条件下的性能差异?
-
11-09-2019 - |
题
我有我冒充多为我的好奇一个简单的问题。
什么是这两行代码之间的差异? (在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++)
...
}
其他提示
使用一个这样的逗号将简单的丢弃所述第一条件强>
逗号操作符的意思是“运行的顺序这些语句中,并采取最后一个的值”。
不隶属于 StackOverflow