【C++】使用cout輸出cerr

2020-11-10 C++

我遇到了一段基本上執行以下操作的程式碼:

#include <iostream>

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

    return 0;
}

輸出:
0x601088 Hi.

首先,為什麼有人會做“cout << 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

有什麼想法嗎?

解決辦法

在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;
}

出處

Have any Question?

Let us answer it!