C / C ++: как это встроить, если анализируется? - PullRequest
4 голосов
/ 12 мая 2011

Рассмотрим этот код:

int main()
{
    cout << true ? "Yes" : "No";
    return 0;
}

Его вывод будет 1, а не Yes или No.Почему true отправляется в выходной поток вместо строк Yes или No?Как остальная часть inline, если будет проанализирован?

1 Ответ

10 голосов
/ 12 мая 2011

Это связано с порядком операций. Это так же, как:

  (cout << true) ? "Yes" : "No";

cout << true возвращает ostream&, который должен иметь преобразование в bool или эквивалентный ему. Результат ?: отбрасывается.

Если это кажется странным (почему этот приоритет?), Просто помните, что operator<< ostream - это перегрузка, введенная в коде C ++, которая не позволяет изменять приоритет. Приоритет << предназначен для того, что имеет смысл для сдвига битов. Его использование в качестве оператора потоковой передачи появилось намного позже.

Редактировать: Возможно, преобразовать в (void*), используя это: http://www.cplusplus.com/reference/iostream/ios/operator_voidpt/

...