使用cout输出cerr

时间:2017-12-15 15:45:52

标签: c++ compiler-errors iostream

我遇到了一段基本上完成以下操作的代码:

#include <iostream>

using namespace std;
int main()
{
    cout << cerr << " Hi.";

    return 0;
}

输出:

0x601088 Hi.

首先,为什么有人会'cout&lt;&lt; cerr'它没有意义。 第二,上面输出的含义是什么?

值得一提的是,在我的机器上,上面的代码编译并执行时没有错误。

然而,在运行相同版本的gcc 5.4.0的不同机器(服务器ssh连接)上执行更复杂的代码(执行与上述相同的操作)会在执行make时产生此错误(为了清晰起见缩短):

error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘std::ostream {aka std::basic_ostream<char>}’)
     cout << cerr << "DB: Field " + e.table + "[" + e.index + "]." + e.field

对此有何想法?

1 个答案:

答案 0 :(得分:13)

在c ++ 11之前,std::basic_ios提供了implicit conversion to void*。此代码不会使用c ++ 11或更高版本进行编译。你基本上有这个,它与旧版本的gcc编译:

#include <iostream>
int main()
{
    void * x = std::cerr;
    std::cout << x << " Hi.";

    return 0;
}