#include <iostream>
using namespace std;
class CTest
{
int x;
public:
CTest()
{
x = 3;
cout << "A";
}
};
int main () {
CTest t1;
CTest t2();
return 0;
}
CTest t1当然会打印“A”。
但似乎没有任何事情发生在t2(),但代码运行良好。
那么我们在没有参数的情况下使用这些括号吗?或者为什么我们可以这样使用它?
答案 0 :(得分:17)
这是C ++语法的一个怪癖。这条线
CTest t1;
声明名为CTest
的{{1}}类型的局部变量。它隐式调用默认构造函数。另一方面,行
t1
不是变量声明,而是名为CTest t2();
的函数的本地原型,它不带参数并返回t2
。不为CTest
调用构造函数的原因是因为这里没有创建对象。
如果要声明对象类型的局部变量并使用默认构造函数,则应省略括号。
在C ++ 11中,您也可以说
t2
实际调用默认构造函数。
希望这有帮助!