Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将流打印到自身的目的可能是什么?_C++ - Fatal编程技术网

C++ 将流打印到自身的目的可能是什么?

C++ 将流打印到自身的目的可能是什么?,c++,C++,我试图建立一个第三方C++代码库,其中有几个地方试图打印输出流给自己。此示例演示了相同形式的表达式: #include <iostream> int main(void) { std::cout << std::cout << "Say what?" << std::endl; return 0; } #包括 内部主(空){ 标准::cout 将流打印到自身的目的可能是什么 这可能是无意的,或者意图本身就是一个错误 PG>版本之

我试图建立一个第三方C++代码库,其中有几个地方试图打印输出流给自己。此示例演示了相同形式的表达式:

#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是标准的默认版本。