# C++ conditional ternary operators, evaluate more than one expression

27 May 2021Even since I have learned about C++’s conditional ternary operators I have been using the heck out of them to create short code where `if`

/ `then`

loops would have been before.

The operator is the question mark, `?`

, and you use it like so:

```
condition ? result1 : result2
```

The equivalent `if`

/ `then`

is:

```
if (condition == true){
result1;
} else {
result2;
}
```

There’s more detail at www.cplusplus.com, at the ‘conditional ternary operators’ section.

Something I do very frequently: iterating through a loop, load an image, do things with it, need to record some things. In this case it is the min / max of rows / cols of some features.

```
im.rows > max_rows ? max_rows = im.rows : 0;
im.rows < min_rows ? min_rows = im.rows : 0;
im.cols > max_cols ? max_cols = im.cols : 0;
im.cols < min_cols ? min_cols = im.cols : 0;
```

I do this kind of thing a lot. There is no `result2`

, or `else`

to my conditional, so I just put `0`

.

But, I wanted to alter this code to record the index that triggered the update of the min / max values. In other words, I wanted two expressions instead of one to be evaluated.

It turns out I can do this with the comma operator! (The next operator down at www.cplusplus.com from the conditional ternary operator.) Where one expression is expected, join two together with a comma and enclose with parentheses.

So I can alter my four lines as follows:

```
im.rows > max_rows ? (max_rows = im.rows, max_row_index = i) : 0;
im.rows < min_rows ? (min_rows = im.rows, min_row_index = i) : 0;
im.cols > max_cols ? (max_cols = im.cols, max_col_index = i) : 0;
im.cols < min_cols ? (min_cols = im.cols, min_col_index = i) : 0;
```