Почему в условном операторе (?:) второй и третий операнды должны иметь один и тот же тип?
Мой код:
#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;
}
При компиляции с помощью g++ возникает ошибка:
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’
Я блуждаю, почему они должны иметь один и тот же тип?
(1) На мой взгляд, если (a>b) истинно, тогда выражение ( a>b ? "a is greater\n" : b ) вернется "a is greater\n", а cout << "a is greater\n" выведет эту строку;
иначе выражение вернет b, а cout << b выведет значение b.
Но, к сожалению, это не так. Почему?
(2) Второе выражение получает ту же ошибку.
PS: Я знаю, это стандарт, который говорит, что это должно быть так, но почему стандарт так говорит?