Почему в условном операторе (?:
) второй и третий операнды должны иметь одинаковый тип?
Мой код такой:
#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: Я знаю, это стандарт, который говорит, что так должно быть, но почему стандарт так говорит?