Question

I have a simple question that I am posing mostly for my curiousity.

What are the differences between these two lines of code? (in C++)

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

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

The selection of the conditions is completely arbitrary, I'm just interested in the differences between , and &&.

I'm not a beginner to coding by any means, but I've never bothered with the comma operator.

Are there performance/behavior differences or is it purely aesthetic?

One last note, I know there are bigger performance fish to fry than a conditional operator, but I'm just curious. Indulge me.

Edit Thanks for your answers.

It turns out the code that prompted this question had misused the comma operator in the way I've described. I wondered what the difference was and why it wasn't a && operator, but it was just written incorrectly. I didn't think anything was wrong with it because it worked just fine. Thanks for straightening me out.

Was it helpful?

Solution

Although it looks like it,

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

and

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

are not equivalent.

Here is the proof.

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

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

Result:

5

Which means that the when determining when the loop will exit it will use N > 0. If N = 10, this means that it will always be true and the loop will never exit.

Run this and see the proof.

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

If N is a constant or variable that doesn't change inside the loop then you could just remove the N > 0 check by checking it once first, i.e.

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

OTHER TIPS

Using a comma like that will simply discard the first condition.

The comma operator means "run these statements in this order, and take the value of the last one".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top