我一直在编写一个定制的std::streambuf
作为日志系统的一部分。但是,我遇到了未正确格式化的流的第一部分输出问题。std :: ostream没有正确格式化const char *第一次使用
下面是不使用任何自定义streambuf
或ostream
类减少的测试用例:
#include <iostream>
int main()
{
std::streambuf *coutbuf = std::cout.rdbuf();
std::ostream(coutbuf) << "test" << ": writing to cout using a separate ostream." << std::endl;
return 0;
}
编译此使用克++:
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu8) 4.4.1
$ g++ -o fail reduced-case.cpp
$ ./fail
0x400c80: writing to cout using a separate ostream.
注意,第一字符串文字(“测试“)被格式化为通用指针(字符串的地址以十六进制输出),而第二个字符串文本格式正确。
我能想到的唯一情况是直接使用新构造的std::ostream
(即不将它放入变量)是无效的。如果是这种情况,我很想知道究竟是什么使其无效(我认为这与iostreams没有任何关系,而是与评估顺序或与构造函数的相互作用等)。如果这不是问题,那么是什么?