Why in conditional operator(?:
), second and third operands must have the same type?
My code like this:
#include <iostream>
using std::cout;
int main()
{
int a=2, b=3;
cout << ( a>b ? "a is greater\n" : b ); /* expression ONE */
a>b? "a is greater\n" : b; /* expression TWO */
return 0;
}
When compile it using g++, it issue an error:
main.cpp:7:36: error: operands to ?: have different types ‘const char*’ and ‘int’
main.cpp:8:28: error: operands to ?: have different types ‘const char*’ and ‘int’
I wonder why they must have the same type?
(1) In my opinion, if (a>b)
is true, then the expression ( a>b ? "a is greater\n" : b )
will return "a is greater\n"
and cout << "a is greater\n"
will output that string;
otherwise the expression will return b
, and cout << b
will output the value of b.
But, unfortunately it is not like this. WHY?
(2) The second expression gets the same error.
PS: I know, it is the standard who says it must be like this, but, why the standard say so?