类的变量的初始化:成员初始化列表、就地初始化

类的变量的初始化分为成员初始化列表、就地初始化。

成员初始化列表是C++中构造函数的一部分,它允许你在进入构造函数体之前为类的成员变量提供初始值。成员初始化列表紧跟在构造函数的参数列表之后,由冒号 : 开始,然后是一系列以逗号分隔的初始化项。

就地初始化(也称为成员初始器或直接初始化)是指在类或结构体的成员变量声明时直接给它们赋初值。

就地初始化(也称为成员初始器或直接初始化)是在对象创建时发生的,它在构造函数体执行之前就已经完成了。具体来说,在C++中,成员变量的初始化遵循以下顺序:

  1. 成员初始化列表:如果构造函数使用了成员初始化列表,那么这些成员会按照它们在类中声明的顺序进行初始化,而不是按照初始化列表中的顺序。

  2. 就地初始化:对于那些没有在成员初始化列表中显式初始化的成员变量,如果它们已经在声明时进行了就地初始化,那么它们会在构造函数体执行之前被赋予这些默认值。

  3. 构造函数体:最后,构造函数体内的代码会被执行。

因此,可以这样理解就地初始化的过程:

  • 当一个对象被创建时,编译器首先检查每个成员变量是否在构造函数的成员初始化列表中有对应的初始化。
  • 如果某个成员变量没有出现在成员初始化列表中,但已经定义了就地初始化,则该成员变量会被赋予就地初始化提供的值。
  • 所有成员变量初始化完成后,才会开始执行构造函数体内的语句。

举个例子,假设有一个结构体如下:

cpp 复制代码
struct Example
{
    int a = 42; // 就地初始化
    std::string b; // 没有就地初始化

    Example(int x) : b("Hello") // 成员初始化列表
    {
        // 构造函数体
    }
};

在这个例子中,Example 对象的创建过程如下:

  1. a 被就地初始化为 42
  2. b 在成员初始化列表中被初始化为 "Hello"
  3. 然后构造函数体被执行。

所以,就地初始化发生在构造函数体执行之前,并且是按照成员变量在类中声明的顺序来完成的。如果成员变量也在成员初始化列表中被初始化,那么成员初始化列表中的初始化将覆盖就地初始化。

相关推荐
桦08 分钟前
【C++复习】:继承
开发语言·c++
鱼难终27 分钟前
类和对象(下)
c++
云泽80843 分钟前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
邪神与厨二病2 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和
elseif1233 小时前
出题团招人【ETOI_】
c++
第二只羽毛3 小时前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见4043 小时前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
王老师青少年编程4 小时前
信奥赛C++提高组csp-s之组合数学专题课:鸽巢原理详解及案例实践
c++·组合数学·信奥赛·抽屉原理·csp-s·提高组·鸽巢原理
njidf4 小时前
C++与Qt图形开发
开发语言·c++·算法
qwehjk20084 小时前
代码动态生成技术
开发语言·c++·算法