我有一个简单的问题,我主要是因为我的好奇。
这两行代码之间有什么区别? (在C ++中)
for(int i = 0; i < N, N > 0; i++)
for(int i = 0; i < N && N > 0; i++)
条件的选择完全是随意的,我只是对和&amp;&amp;之间的差异感兴趣。
我不是一个以任何方式编码的初学者,但我从不打扰逗号运算符。
是否存在性能/行为差异或纯粹是美学?
最后一点,我知道有一个比条件运算符更好的性能鱼,但我只是好奇。放纵我。
修改的 谢谢你的回答。
事实证明,提示这个问题的代码以我描述的方式滥用了逗号运算符。我想知道它的区别是什么,为什么它不是&amp;&amp;运算符,但它只是写得不正确。我觉得它没有任何问题,因为它运作得很好。谢谢你把我拉直了。
答案 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++)
...
}