Typo with “cout < myint”. Why does it work?

时光毁灭记忆、已成空白 提交于 2019-11-30 03:25:53

integral constant 0 is also a null pointer constant - it can be compared to the result of ostream's operator void *. Note that it'll fail if the constant has any value but 0.

The prototypes of the < operator are like :

    ​bool T::operator <(const T& b) const;

So I guess the compiler transtype the argument as the type of this instance. Did you enabled all the warnings like -Wall

It does compile with g++ 4.4.3

#include  <iostream>

int main (void)
{
   int const income = 0;
   std::cout << "I'm sorry, your income is: " < income;
}

However, when running it with -Wall (good practice!), I got a funny message:

:~/stack$ g++ test.cpp -o temp
:~/stack$ g++ -Wall test.cpp -o temp
test.cpp: In function 'int main()':
test.cpp:5: warning: right-hand operand of comma has no effect

No clue what it actually does (or tries to do)...

When I compile this code using GCC 4.3.4, I see a warning:

prog.cpp: In function ‘int main()’:
prog.cpp:6: warning: right-hand operand of comma has no effect

...though why it's a warning rather than an error, I don't know.

EDIT: In fact, I don't know which comma it's referring to either, because this code:

int const income = 0;
std::cout << "I'm sorry your income is: " < income;

...generates the same warning (see here).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!