错字与“cout< myint”。它为什么有效?

时间:2011-04-14 15:00:24

标签: c++ iostream

我有这个代码,我搜索了几个小时,为什么它无法打印我的收入

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

直到我发现我错过了写<<但写了<。为什么编译器没有检测到这个并且错误输出?我不确定为什么比较cout有意义?

4 个答案:

答案 0 :(得分:28)

整数常量0也是一个空指针常量 - 它可以与ostream的{​​{1}}的结果进行比较。请注意,如果常量具有任何值但是为0,则它​​将失败。

答案 1 :(得分:0)

当我compile this code using GCC 4.3.4时,我看到了警告:

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

......虽然为什么它是警告而不是错误,但我不知道。

编辑:事实上,我不知道它指的是哪个逗号,因为这段代码:

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

...生成相同的警告(请参阅here)。

答案 2 :(得分:0)

<&lt;原型&lt;运营商就像:

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

所以我猜编译器会将参数转换为此实例的类型。 您是否启用了所有警告,例如-Wall

答案 3 :(得分:0)

使用g ++ 4.4.3进行编译

#include  <iostream>

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

然而,当用-Wall运行它时(好的练习!),我收到了一条有趣的消息:

:~/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

不知道它实际上做了什么(或试图做什么)......