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

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

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

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

相关推荐
_dindong1 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
熊猫钓鱼>_>1 小时前
Java面向对象核心面试技术考点深度解析
java·开发语言·面试·面向对象··class·oop
liu****1 小时前
12.线程(二)
linux·开发语言·c++·1024程序员节
小冯的编程学习之路2 小时前
【C++】:C++基于微服务的即时通讯系统(2)
开发语言·c++·微服务
许长安2 小时前
C/C++中的extern关键字详解
c语言·开发语言·c++·经验分享·笔记
earthzhang20213 小时前
【1039】判断数正负
开发语言·数据结构·c++·算法·青少年编程
蕓晨3 小时前
auto 自动类型推导以及注意事项
开发语言·c++·算法
mjhcsp4 小时前
C++ 递推与递归:两种算法思想的深度解析与实战
开发语言·c++·算法
_OP_CHEN4 小时前
算法基础篇:(三)基础算法之枚举:暴力美学的艺术,从穷举到高效优化
c++·算法·枚举·算法竞赛·acm竞赛·二进制枚举·普通枚举
m0_748248024 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
java·开发语言·c++·算法