Cod*_*ile 7 c++ loops comma-operator logical-operators
我有一个简单的问题,我主要是因为我的好奇.
这两行代码之间有什么区别?(在C++中)
for(int i = 0; i < N, N > 0; i++)
for(int i = 0; i < N && N > 0; i++)
Run Code Online (Sandbox Code Playgroud)
条件的选择是完全随意的,我只是对&和之间的差异感兴趣.
我不是任何编码的初学者,但我从未打扰过逗号运算符.
是否有性能/行为差异或纯粹是美学?
最后一点,我知道有一个比条件运算符更好的性能鱼,但我只是好奇.放纵我.
编辑 感谢您的回答.
事实证明,提示这个问题的代码以我描述的方式滥用了逗号运算符.我想知道区别是什么以及为什么它不是&&运算符,但它只是写得不正确.我觉得它没有任何问题,因为它运作得很好.谢谢你把我拉直了.
Mat*_*att 10
虽然它看起来像,
for(int i = 0; i < N, N > 0; i++)
Run Code Online (Sandbox Code Playgroud)
和
for(int i = 0; i < N && N > 0; i++)
Run Code Online (Sandbox Code Playgroud)
不等同.
这是证明.
int main(int argc, char* argv[])
{
int N = 10;
int i = 5;
int val = (N, i);
cout << val << endl;
}
Run Code Online (Sandbox Code Playgroud)
结果:
5
Run Code Online (Sandbox Code Playgroud)
这意味着在确定循环何时退出时将使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果N是一个在循环内没有变化的常量或变量,那么你可以N > 0
通过先检查它来删除检查,即
if (N > 0){
for (int i = 0; i < N; i++)
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
598 次 |
最近记录: |