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