星期一, 四月 09, 2007

关于c++构造函数的一个小问题

class Test
{
public:
Test(){cout<<"In test constructor." ;}>
Test(int){cout<<"In test constructor1. ";}>
};
int main()
{
Test a;
Test a();
Test a(1);
}

我以前一直以为这两种方式是一样的,都是调用了类Test的默认构造函数,然后生成对象。
但是实际上,第二种不是:因为即使你把构造函数声明成私有的,第二行还是能编译通过。
后来想了一下,可能编译器把Test a()当成一个函数声明了。
因为Test a(1)这种样子,编译器不会把它理解成函数声明,而Test a()这种就有可能,所以为了消除歧义,编译器(gcc3.3,vc6)就把Test a()这种方式规定成函数声明了。

没有评论: