您的位置:首页 > 编程语言 > C语言/C++

C++标准库的一个有趣的小bug

2008-04-01 16:52 253 查看
在看别人的代码时,意外发现了一个标准库的问题(不知到标准委员会的c++ standard lib.core issue文件里有没有提到,不管它),是这样的,代码如下:
struct X
{
};
ostream& operator<<(ostream& out,    X&  x   /*坏习惯*/)
{                                                          ^^^^ ---- #1 non-const reference
    ...
    return out;
}
void use1()
{
    vector v;
    v.push_back(X());
    copy(v.begin(),v.end(),ostream_iterator(cout,"/n") ); //编译错误!
}
void use2()
{
    X x;
    cout<(cout) )"调用方式就会出漏子了。这个篓子还不算严重,至少你还被阻止在编译期,另外一种情况更为严重——通过编译但运行结果让人摸不着头脑,我们为原先的例子加上一些代码:
ostream& operator<<(ostream& out,X* & px)
 {
      ...
      return out;
 }
void use3()
{
X* px=new X;
cout
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: