Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1064952
  • 博文数量: 77
  • 博客积分: 11498
  • 博客等级: 上将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 11:10
文章分类

全部博文(77)

文章存档

2011年(1)

2010年(16)

2009年(5)

2008年(55)

分类: C/C++

2010-03-28 03:11:15

今天在写代码时,遇到了一个奇怪的问题。分析发现,此类似问题很容易引起难以发现的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)。

阅读(1662) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~