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、使用场景

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

相关推荐
choumin6 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里7 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
努力努力再努力wz10 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光10 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版
十五年专注C++开发10 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp201910 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
沫璃染墨11 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
hetao173383711 小时前
2026-10-25 hetao1733837 的刷题记录
c++·算法
fqbqrr12 小时前
2610C++,UI复合技术在窗口中绘画字体图标
c++·ui
见叶之秋12 小时前
【C++】红与黑的边界:红黑树从插入到自检
数据结构·c++·算法·面试