C++ 将流打印到自身的目的可能是什么?
我试图建立一个第三方C++代码库,其中有几个地方试图打印输出流给自己。此示例演示了相同形式的表达式:C++ 将流打印到自身的目的可能是什么?,c++,C++,我试图建立一个第三方C++代码库,其中有几个地方试图打印输出流给自己。此示例演示了相同形式的表达式: #include <iostream> int main(void) { std::cout << std::cout << "Say what?" << std::endl; return 0; } #包括 内部主(空){ 标准::cout 将流打印到自身的目的可能是什么 这可能是无意的,或者意图本身就是一个错误 PG>版本之
#include <iostream>
int main(void) {
std::cout << std::cout << "Say what?" << std::endl;
return 0;
}
#包括
内部主(空){
标准::cout
将流打印到自身的目的可能是什么
这可能是无意的,或者意图本身就是一个错误
<> PG>版本之间的差异是C++使用的默认方言。新的GCC默认为C++ 11或更新。程序应该使用较新的编译器编译,只要使用前C + + 11方言。
C++11中的更改是删除了从std::basic_ios
到void*
的隐式转换。此转换的目的是检查流的故障状态:null表示故障流,而非null表示允许模式if(流>>输入)的有效流
。在C++11中,转换被替换为显式转换为bool
。由于新的转换是显式的,因此它不会应用于将流插入流中。这是一个向后不兼容的更改,可能被认为不是问题,因为现在使用转换的方式不兼容(例如示例)将没有实际用途。事实上,在执行没有实际用途的操作时,获得编译错误是很有用的
我的总体目标是决定如何最好地修复代码
可能只是删除了在cout
中插入的cout
。如果您担心输出必须保持不变,因为它可能会被另一个程序解析,那么您可以输出任何非零十六进制数,以保持输出不变,以确保兼容性。除非原始作者可以告诉您,否则我将继续输入错误的解释…并且没有自定义重载用于ostream&operator它可能是某种跟踪机制,代码将对象的地址插入流中,以便您知道是哪个流负责。ostream
用于衰减为void*
,并且它有重载用于打印 无效*
's@AlanBirtles这是一个C++标准的改变。C++ 98/03没问题。C++ 11删除了使它工作的转换操作符。@ AlanBirtles不是bug。只是在某个时候,GCC切换到C++ 11是标准的默认版本。