• 3472阅读
  • 0回复

在Qt程序中使用C++标准库输出流可能遇到的问题 [复制链接]

上一主题 下一主题
离线tyc611
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-28
今天在写代码时,遇到了一个奇怪的问题。分析发现,此类似问题很容易引起难以发现的Bug,特分享于大家。

问题代码简化如下:

typedef std::wostream OStreamType;
#include <QtCore/QtCore>

...
OStreamType os;
...
os << endl;  // (1)
...

在上面的代码中,(1)处的代码并不会按预期调用std::endl(os),而是调用了 std::wostream::operator<<(const void *)函数,此时函数参数为<QtCore/QTextStream>中的endl。如果把(1)处的代码改为“os << std::endl”,那么其结果将是我们所期望的。

因此,在Qt程序中使用标准C++库中的输出流时需要注意这个问题,其可能会导致难以察觉的Bug。
此外,这个问题同样存在于<QtCore/QTextStream/QTextStream>中定义的其它类似IO Manipulator,比如hex,fixed等等。

避免方法:在使用了标准库的源文件中加上using namespace std指令,或者使用限制名(如std::endl)。

快速回复
限100 字节
 
上一个 下一个