在C ++中实例化变量与不使用大括号有什么区别?

时间:2014-01-08 03:19:48

标签: c++ declaration instantiation braces

#include <iostream>
using namespace std;

struct CTest 
{
    CTest() { cout << "Constructor called"; }
    CTest(string s) { cout << "Any constructor with parameters"; } 
};

int main () {
  CTest t1;
  CTest t2{};
}

我来自Java世界,因为这两行都调用了t1的构造函数,因此只会声明CTtest,但绝对不是这种情况。在这种情况下,t1调用覆盖的默认构造函数以及t2。是否存在实际上有所不同的情况,或者我们是否总能省略大括号?

也许只是我,但我找不到任何暗示。只讨论何时使用大括号与括号(对比值与复制构造函数)。

1 个答案:

答案 0 :(得分:0)

当一个类的唯一构造函数是它的默认构造函数时,用大括号进行初始化并不重要:

CTest t1;
CTest t2{};

是一样的。

只有当你有其他的构造函数接受那些将这些参数的值放在{}中并且你正在做一些新事物的参数时。