最近写代码的时候发现一个奇怪的现象:当我声明一个无参构造函数时,如果后面加上括号,声明出的对象就不能显示。比如下面的代码:
#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"了。
本文深入探讨了构造函数在C++中使用时的常见误解,特别关注在声明构造函数时加上括号对对象创建的影响。通过实例演示,揭示了构造函数作为函数的本质及其与普通函数的区别。
1229

被折叠的 条评论
为什么被折叠?



