今天在写代码时,遇到了一个奇怪的问题。分析发现,此类似问题很容易引起难以发现的Bug,特分享于大家。
问题代码简化如下:
typedef std::wostream OStreamType;
#include
...
OStreamType os;
...
os << endl; // (1)
...
在上面的代码中,(1)处的代码并不会按预期调用std::endl(os),而是调用了std::wostream::operator<<(const void *)函数,此时函数参数为中的endl。如果把(1)处的代码改为“os << std::endl”,那么其结果将是我们所期望的。
因此,在Qt程序中使用标准C++库中的输出流时需要注意这个问题,其可能会导致难以察觉的Bug。
此外,这个问题同样存在于中定义的其它类似IO Manipulator,比如hex,fixed等等。
避免方法:在使用了标准库的源文件中加上using namespace std指令,或者使用限制名(如std::endl)。
阅读(1707) | 评论(0) | 转发(0) |