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

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

相关推荐
xiangyun617 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun617 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
fpcc9 小时前
计算机原理—构建过程中的分段分析
c++
xxwxx__9 小时前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
Escalating_xu9 小时前
【C语言常见概念】从第一行代码到字符串结束标志:一次打通编译、main、ASCII、转义字符与注释
c语言·c++
bnmoel9 小时前
C++ 基础入门篇(三):内联函数与空指针
c++·内联函数·nullptr·低层
码匠许师傅9 小时前
【C++三方组件】TinyXML2:两个文件的极简 XML 解析器
xml·c++
free-elcmacom9 小时前
C++学习<1>程序分区
开发语言·c++
xxwxx__12 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
j7~14 小时前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机