Why can't I write cout<<a==b; but can write cout<<(a==b);

Viewed 135

I know () has higher precedence than <<, and << has higher precedence than ==, but I want to know why I can't write cout<<a==b; yet can write cout<<(a==b); in C++.

How the compiler translates cout<<a==b; and then shows error?

3 Answers

<< has higher precedence than == as you can see here.

The statement

cout<<a==b

is equivalent to

(cout<<a)==b

The expression

cout<<a

returns a stream. This stream is compared to b. If there is no left shift operator for a stream and a or no comparing operator for a stream and b this causes a compiler error

cout<<a==b is similar to (cout<<a) == b as << has higher precedence over ==. Now cout<<a will be syntactically incorrect if the type of a is not supported for <<. Next, if a has an overload for the << operator, it will again be syntactically wrong as the == operator can't operate with std::stream and type of b unless b overloads this compare operator.

But in case of cout<<(a==b), a==b will result in a boolean value. As the << operator support boolean value it is a valid operation.

<< priority is higher than == so it's interpreted as (cout<<a)==b

but = has lower so you can do :

bool t = a == b

Related