VC++2005虽然比不上g++,但也差强人意,可以用于工作和学习,因此我把已经发现的bug汇总起来(以前发表过的bugs不再重复汇总),以便工作时避开这些bug。
1.
#include <iostream>
using namespace std;
void foo( char* )
{
cout << “foo( char* )” << endl;
}
void foo( const char* )
{
cout << “foo( const char* )” << endl;
}
int main()
{
foo( “abc” );
try {
throw “abc”;
}
catch( char* ) {
cout << “catch( char* )” << endl;
}
catch( const char* ) {
cout << “catch( const char* )” << endl;
}
}
输出为
foo( const char* )
catch( char* )
应当为
foo( const char* )
catch( const char* )
2.
#include <set>
using namespace std;
int main()
{
set<int> a;
a.insert( 1 );
*a.begin() = 2; // set键应当不可以修改
system( “pause” );
}
3.
#include <iostream>
using namespace std;
template<typename T> struct foo
{
void bar( int a = 1 );
};
template<typename T> void foo<T>::bar( int a = 2 ) // 应当不可以重复定义缺省值
{
cout << a << endl;
}
int main()
{
foo<int> a;
a.bar();
}
4.
union foo
{
static const int a = 2; // 理应不可以
};
5.
template<class T> struct foo
{
T a;
typedef float T; // 掩盖了模板参数
T b;
};
6.
#include<string>
using namespace std;
string foo( void )
{
return “123″;
}
void bar( string& s )
{
s = “abc”;
}
int main()
{
foo()[0] = ‘X’; // 提醒一下,虽然foo()为temporary变量,但其不是const变量,所以仍可调用non-const成员函数
bar( foo() ); // vc++2005编译通过;g++报错:无法将临时变量转化为non-const引用
bar( string(“ABC”) ); // vc++2005编译通过;g++报错:无法将临时变量转化为non-const引用
bar( “ABC” ); // 两者都报错
}
7.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void foo() {
cout << “right” << endl; // 输出这个则代表正确
}
template<typename T> struct B {
void foo() {
cout << “wrong” << endl; // 输出这个则代表错误
}
};
template<typename T> struct D: B<T> {
void bar() {
foo();
}
};
int main() {
D<int> d;
d.bar();
}
8. 一个无伤大雅的小bug
struct foo
{
virtual void bar() = 0 {}
};
应当不可以编译通过,正确的应当写成
struct foo
{
virtual void bar() = 0;
};
void foo::bar() {}
因为 ISO/IEC 14882:2003(E) 10.4.2 说:
[Note: a function declaration cannot provide both a pure-specifier and a definition
—end note]
[Example:
struct C {
virtual void f() = 0 { }; // ill-formed
};
—end example]
此列表随时增加中,欢迎提供bug。
引用:http://blog.vckbase.com/bruceteen/archive/2006/05/30/20366.html
>> 本文固定链接: http://www.vcgood.com/archives/1472