使用括号还是不使用括号实例化类?

时间:2012-02-28 21:55:05

标签: c++ constructor

#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(),但代码运行良好。

那么我们在没有参数的情况下使用这些括号吗?或者为什么我们可以这样使用它?

1 个答案:

答案 0 :(得分:17)

这是C ++语法的一个怪癖。这条线

CTest t1;

声明名为CTest的{​​{1}}类型的局部变量。它隐式调用默认构造函数。另一方面,行

t1

不是变量声明,而是名为CTest t2(); 的函数的本地原型,它不带参数并返回t2。不为CTest调用构造函数的原因是因为这里没有创建对象。

如果要声明对象类型的局部变量并使用默认构造函数,则应省略括号。

在C ++ 11中,您也可以说

t2

实际调用默认构造函数。

希望这有帮助!