在C++中使用花括号实例化对象是什么意思?

9 c++ constructor data-structures

假设我有一个结构定义为:

typedef
struct number{
    int areaCode;
    int prefix;
    int suffix;
} PhoneNumber;
Run Code Online (Sandbox Code Playgroud)

当我创建此结构的实例时,如果我使用以下语法:

PhoneNumber homePhone = {858, 555, 1234};
Run Code Online (Sandbox Code Playgroud)

...它正在调用哪个构造函数?默认构造函数,或复制构造函数,或者根本没有,因为它没有调用'new'?

这个问题的真正目的是弄清楚如何添加第四个字段.所以我想重新定义我的结构:

typedef
struct number{
    int areaCode;
    int prefix;
    int suffix;
    int extension; // NEW FIELD INTRODUCED
} PhoneNumber;
Run Code Online (Sandbox Code Playgroud)

所以现在,我可以用FOUR字段创建新的PhoneNumber对象:

PhoneNumber officePhone = {858, 555, 6789, 777}
Run Code Online (Sandbox Code Playgroud)

但是,我已经创建了数百个这样的PhoneNumber实例,只有3个字段(xxx,xxx,xxxx).因此,我不想通过修改已定义的PhoneNumber对象的每个单一实例化.我希望能够独自留下这些,但仍然能够使用FOUR字段创建新的电话号码实例.所以我试图找出如何覆盖构造函数,以便我现有的三参数实例化不会中断,但它也将支持我的新的四参数实例化.

当我尝试定义一个覆盖3个字段并将第四个设置为默认值'0'的覆盖默认构造函数时,我得到错误(在代码的实例化部分,而不是构造函数定义)抱怨我的对象必须由初始化构造函数,而不是{...}.所以,如果我覆盖默认构造函数,我似乎不能再使用花括号来创建我的新对象了?

对不起,如果这完全偏离了原来的问题.

Cha*_*tin 1

它有效地调用了默认的ctor;发生的情况是分配了一个结构,并且使用默认的“=”分配了每个值。