C++标准库的一个有趣的小bug
2008-04-08 23:31
211 查看
在看别人的代码时,意外发现了一个标准库的问题(不知到标准委员会的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
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
相关文章推荐
- C++标准库的一个有趣的小bug(转载)
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- C++标准库的一个有趣的小bug
- 关于DropDownList的一个有趣的Bug~
- 一个有趣的bug
- 播客:IE7的一个有趣的BUG
- 探讨C#.NET下DropDownList的一个有趣的bug及其解决办法
- Jenkins的构建编号和一个有趣的bug
- 一个有趣的Bug修正记
- cocos2dx粒子效果的一个有趣的bug
- 发现Ubuntu一个有趣的bug
- 一个有趣的小 Bug 避免了一场大灾难
- 一个有趣的现象(苹果的bug Or 坑?),关于区分真机和模拟器的预编译宏
- Geogebra里面一个有趣的LaTeX代码bug