Search code examples
c++operator-precedence

Ternary Operator And Addition Precedence


Could some explain how the following works, given the precedence table here: http://en.cppreference.com/w/cpp/language/operator_precedence

Given:

#include <cstdio>

#define MY_CONSTANT 5.6

int main(int argc, char ** argv) {
    const double calculatedValue = 4.4;
    const double myValue = MY_CONSTANT + 1 ? 4.4 : -4.4;

    printf("%f\n", myValue);
    return 1;
}

I expect

myValue == 10

I get

myValue == 4.4;

Solution

  • const double myValue = MY_CONSTANT + 1 ? 4.4 : -4.4;
    

    is equivalent to:

    const double myValue = (MY_CONSTANT + 1) ? 4.4 : -4.4;
    

    Because ?: has lower precedance than + in C++ operator precedence table

    Because (MY_CONSTANT + 1) evaluates to non-zero, myvalue is 4.4.

    To get 10 as output, you need explicit parenthesis to change the order of evaluation:

    const double myValue = MY_CONSTANT + (1 ? 4.4 : -4.4);
    //                                   ^              ^