C/C++ 知识点:类成员初始化方法

一、类成员初始化方法

C++支持的类成员初始化方法有:初始化列表、构造函数初始化、声明时初始化(C++11后才支持)。从C++11之后,这三种初始化的方法都可以使用,并不会存在冲突,但是,他们之间是有优先级顺序的,这个优先级来源于他们在初始化的时间顺序,后面初始化的会把前面的覆盖掉,成员变量的初始化顺序是声明时初始化->初始化列表->构造函数初始化。因此,假如三种初始化方式同时存在的话,那么最后保留的成员变量值肯定是构造函数中初始化的值。下面分别介绍这几种初始化方法以及对应的使用场景。

1、初始化列表

1.1、使用方法

cpp 复制代码
class A
{
public:
    int a; // 初始化列表
    A(int a_):a(a_){}
};

1.2、使用场景

下面几种情况推荐使用初始化列表进行初始化

  • const成员变量只能用成员初始化列表来完成初始化,而不能在构造函数内赋值
  • 对象成员的初始化
  • 引用成员的初始化

2、构造函数初始化

2.1、使用方法

cpp 复制代码
class A
{
public:
    int a; // 初始化列表
    A(int a_, bool b) { a = a_; }
};

2.2、使用场景

非静态数据成员都支持在构造函数里面进行初始化

3、声明时初始化(C++11后支持)

3.1、使用方法

cpp 复制代码
class A
{
public:
    int a = 1; // 声明时初始化
    A() {}
};

3.2、使用场景

声明时初始化比较直观,看代码就能看到默认值,不需要再去看构造函数

相关推荐
_OP_CHEN33 分钟前
【从零开始的Qt开发指南】(二十三)Qt 界面优化之 QSS 实战指南:从入门到精通,让你的界面颜值飙升!
开发语言·c++·qt·前端开发·界面美化·qss·客户端开发
HellowAmy38 分钟前
我的C++规范 - 跳跃的对象
开发语言·c++·代码规范
lucky-billy42 分钟前
架构设计 - std::forward 条件转换配合万能引用(T&&)来实现完美转发
c++·完美转发·forward·万能引用
bkspiderx1 小时前
C/C++中float浮点型的存储方式与使用要点
c++
起个名字费劲死了2 小时前
QT + Socket 客户端/服务端 公网通讯
服务器·c++·qt·socket
我是一只小青蛙8882 小时前
位图与布隆过滤器:高效数据结构解析
开发语言·c++·算法
xiaoye-duck2 小时前
吃透C++类和对象(下):初始化列表深度解析
c++
曼巴UE53 小时前
UE5 C++ GameInstanceSubsystem 在学习
c++·ue5·ue
Ethan Wilson3 小时前
VS2019 C++20 模块相关 C1001: 内部编译器错误
开发语言·c++·c++20
m0_748252383 小时前
Bootstrap 5 加载效果实现方法
c++