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