当前位置:   article > 正文

【C++】初始化列表

【C++】初始化列表

概念

当创建一个类的实例时,类的构造函数会被调用来初始化该实例。构造函数可以通过其体(即大括号内的代码部分)或通过初始化列表来初始化成员变量。初始化列表位于构造函数的参数列表之后,并以冒号 : 开始。

语法

Constructor(Type1 arg1, Type2 arg2, ...) : member1(init1), member2(init2), ...
{
    // Constructor body
}
  • 1
  • 2
  • 3
  • 4

在这个语法中,member1, member2 等是类的成员变量,而 init1, init2 等是用来初始化这些成员的表达式。

为什么使用初始化列表

初始化列表不仅提供了一种清晰和直接的初始化成员变量的方式,还有几个技术上的优点:

效率:使用初始化列表可以直接初始化成员变量,而不是先默认构造成员然后再赋值。这对于基本数据类型可能看起来不那么明显,但对于需要动态分配内存或其他资源的对象来说,可以避免不必要的构造和析构操作。

必要性:对于常量成员变量和引用成员,初始化列表是必需的,因为这些类型的成员一旦创建后就不能再被赋值。初始化列表提供了唯一的机会来设置这些成员的值。

基类和成员对象的构造:如果一个类继承自基类,或者它包含其他类的对象作为成员,这些基类和成员对象只能通过初始化列表进行初始化。

示例解析

class MyClass {
public:
    int data;
    MyClass(int val) : data(val) {
        std::cout << "MyClass constructed with data = " << data << std::endl;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这个示例中:
dataMyClass 的一个整型成员变量。构造函数接受一个整型参数 val。在构造函数的初始化列表中,data(val) 直接使用传入的 val 初始化 data 成员变量。这意味着当创建 MyClass 的实例时,data 将直接初始化为 val 的值,然后构造函数的体部分(在大括号中)执行,打印出 data 的值。

这种初始化方式确保了代码的效率和成员变量的正确设置,特别是在涉及复杂类型或类的资源管理时尤为重要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/624151
推荐阅读
相关标签
  

闽ICP备14008679号