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

前端之家收集整理的这篇文章主要介绍了c – 使用括号还是不使用括号实例化类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Default constructor with empty brackets9个
#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(),但代码运行良好.

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

解决方法

这是C语法的一个怪癖.这条线
CTest t1;

声明一个名为t1的CTest类型的局部变量.它隐式调用默认构造函数.另一方面,线

CTest t2();

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

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

在C 11中,您也可以说

CTest t2{};

哪个实际上调用默认构造函数.

希望这可以帮助!

猜你在找的C&C++相关文章