Почему я не могу написать cout < - PullRequest
2 голосов
/ 12 октября 2019

Я знаю, что () имеет более высокий приоритет, чем <<, а << имеет более высокий приоритет, чем ==, но я хочу знать, почему я не могу написать cout<<a==b;, но могу писать cout<<(a==b); на C ++.

Как компилятор переводит cout<<a==b;, а затем показывает ошибку?

Ответы [ 3 ]

4 голосов
/ 12 октября 2019

<< имеет более высокий приоритет, чем ==, как вы можете видеть здесь .

Заявление

cout<<a==b

эквивалентно

(cout<<a)==b

Выражение

cout<<a

возвращает поток. Этот поток сравнивается с b. Если для потока нет оператора сдвига влево и a или нет оператора сравнения для потока и b, это вызывает ошибку компилятора

1 голос
/ 12 октября 2019

<< приоритет выше, чем ==, поэтому он интерпретируется как (cout<<a)==b

, но = имеет меньшее значение, поэтому вы можете сделать:

bool t = a == b

1 голос
/ 12 октября 2019

cout<<a==b аналогично (cout<<a) == b, поскольку << имеет более высокий приоритет над ==. Теперь cout<<a будет синтаксически неправильным, если тип a не поддерживается для <<. Далее, если a имеет перегрузку для << operator, он снова будет синтаксически неправильным, поскольку оператор == не может работать с std::stream и типом b, если b не перегружает этот оператор сравнения.

Но в случае cout<<(a==b), a==b приведет к значению boolean. Поскольку оператор << поддерживает значение boolean, это допустимая операция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...