首页 >后端开发 >C++ >初始化列表或构造函数主体:何时应在 C 中使用 Which?

初始化列表或构造函数主体:何时应在 C 中使用 Which?

DDD
DDD原创
2024-12-06 03:22:14640浏览

Initializer List or Constructor Body: When Should You Use Which in C  ?

初始化列表与构造函数体:了解差异

在 C 中,可以使用初始化列表来初始化构造函数中的成员变量或在构造函数体内。虽然它们最初看起来可能达到相同的结果,但需要考虑一些细微的差异。

初始化器列表:

public : Thing(int _foo, int _bar): member1(_foo), member2(_bar){}

初始化器列表是一个逗号 -构造函数参数列表后面的成员初始值设定项的分隔列表。每个初始值设定项都会为相应的成员变量分配一个值。此语法确保成员变量在构造函数主体执行之前初始化。

构造函数主体:

public : Thing(int _foo, int _bar){
    member1 = _foo;
    member2 = _bar;
}

在构造函数主体内,使用赋值语句初始化成员变量。此语法允许在设置构造函数参数后实现更复杂的初始化逻辑。

主要区别:

  • 初始化顺序: 与初始化列表,成员在构造函数主体执行之前初始化,而在构造函数主体中,成员在主体之后初始化
  • 默认构造: 如果成员变量是非 POD(普通旧数据)类型并且没有默认构造函数,则构造函数体方法将无法编译。初始化列表确保在构造函数主体之前调用默认构造函数。

默认参数:

两种方法都以相同的方式处理默认参数。如果在构造函数声明中指定了默认参数,则它们将用于传递给构造函数的任何缺少的参数。

结论:

虽然这两种方法都可以初始化成员变量在构造函数中,非 POD 类型通常首选初始化列表,以确保正确的初始化顺序并避免编译错误。构造函数主体对于更复杂的初始化逻辑很有用,这些初始化逻辑在设置构造函数参数后需要额外的代码。

以上是初始化列表或构造函数主体:何时应在 C 中使用 Which?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn