最近写代码的时候发现一个奇怪的现象:当我声明一个无参构造函数时,如果后面加上括号,声明出的对象就不能显示。比如下面的代码:
#include <stdio.h>
class Test {
public:
Test() {
printf("Test constructed\n");
}
};
int main()
{
printf("==== t1:\n");
Test t1;
printf("==== t2:\n");
Test t2();
return 0;
}
输出的结果,是
==== t1:
Test constructed
==== t2:
其实,Test t2(); 实际上是声明了一个函数。t2是一个接受0个参数,并返回Test对象的一个函数。如果你在下面调用 t2(); 编译器就会给出"未定义的符号 t2"了。