C/C++基础知识复习(25)

1) 什么是 C++ 中的初始化列表?它的作用是什么?

初始化列表(Initialization List)是在 C++ 构造函数的声明中,通过冒号(:)来初始化类成员变量的一种方式。它在构造函数执行之前,首先对类成员变量进行初始化。

构造函数的一般形式如下:

class MyClass {
 private: int a; 
double b; 
public: 
// 使用初始化列表初始化成员变量 
MyClass(int x, double y) : a(x), b(y) {
 // 构造函数体(可选) 
} };

在上面的代码中,a(x)b(y) 就是初始化列表。它们的作用是将参数 xy 分别赋值给类的成员变量 ab

作用

  • 性能优化:初始化列表比在构造函数体内对成员变量赋值更高效,因为成员变量会在对象创建时直接被初始化,而不是先使用默认值再赋新值。
  • 初始化常量成员和引用类型:常量成员变量(const)和引用类型成员变量(如 int&)必须在初始化列表中初始化,因为它们不能在构造函数体内重新赋值。
  • 提高代码的可读性和简洁性:使用初始化列表清晰地表明成员变量的初始化方式。

2) 初始化列表和在构造函数体内赋值有什么区别?

  • 效率

    • 初始化列表:成员变量会在对象创建时直接初始化,即在构造函数体执行之前就完成初始化,因此没有多余的赋值操作。
    • 构造函数体内赋值:成员变量会先使用其默认构造函数进行初始化(如果有默认构造函数的话),然后在构造函数体内再次赋值,这会导致一次不必要的初始化。
  • 常量和引用类型

    • 初始化列表:常量成员变量(const)和引用类型成员(int&)必须通过初始化列表来初始化,因为它们在构造函数体内不能被赋值。
    • 构造函数体内赋值:常量成员和引用类型不能在构造函数体内进行赋值操作,会导致编译错误。
  • 语法差异

    • 初始化列表:成员变量的初始化会在构造函数体之前执行,且更简洁,适用于所有类型的成员。
    • 构造函数体内赋值:成员变量先会进行默认初始化,然后再在构造函数体内进行赋值,适用于大多数类型的成员变量,但不适用于 const 或引用类型。

总结:

  • 使用初始化列表能提高效率,特别是对于常量或引用成员,以及一些需要特别初始化的类型。
  • 在构造函数体内赋值则多了一次无效的默认初始化步骤,因此性能较差,并且对某些类型(如常量、引用)无法使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值