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

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

成员初始化列表是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. 然后构造函数体被执行。

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

相关推荐
信奥胡老师27 分钟前
苹果电脑(mac系统)安装vscode与配置c++环境,并可以使用万能头文件全流程
c++·ide·vscode·macos·编辑器
妖灵翎幺28 分钟前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
star _chen1 小时前
C++实现完美洗牌算法
开发语言·c++·算法
繁星星繁2 小时前
【C++】脚手架学习笔记 gflags与 gtest
c++·笔记·学习
路痴楷2 小时前
无法定位程序输入点问题
c++·qt·visual studio
Source.Liu3 小时前
【LibreCAD】 RS_Units 类完整解析
c++·qt·rust
我是一棵无人问荆的小草3 小时前
编码演变史
开发语言·c++
potato_may4 小时前
CC++ 内存管理 —— 程序的“五脏六腑”在哪里?
c语言·开发语言·数据结构·c++·内存·内存管理
饕餮怪程序猿4 小时前
A*算法(C++实现)
开发语言·c++·算法
ULTRA??5 小时前
C/C++函数指针
c语言·开发语言·c++