[C++]现代C++语言核心特性解析 Chapter 8

非静态数据成员默认初始化(C++11 C++20)

1 使用默认初始化

在C++11以前,对非静态数据成员初始化需要用到初始化列表,当类的数据成员和构造函数较多时,编写构造函数很痛苦。

为了解决这种问题,C++11标准提出了新的初始化方法,即在声明非静态数据成员的同时直接对其使用=或者{}(见第9章)初始化。在此之前只有类型为整型或者枚举类型的常量静态数据成员才有这种声明默认初始化的待遇。

注意事项

  • 不要使用括号()对非静态数据成员进行初始化,因为这样会造成解析问题,所以会编译错误。
  • 不要用auto来声明和初始化非静态数据成员。

2 位域的默认初始化(后续再看)

在C++11标准提出非静态数据成员默认初始化方法之后,C++20标准又对该特性做了进一步扩充。在C++20中我们可以对数据成员的位域进行默认初始化了。

1
2
3
4
struct  S {
int y : 8 = 11;
int z : 4 {7};
};

int数据的低8位被初始化为11,紧跟它的高4位被初始化为7。


[C++]现代C++语言核心特性解析 Chapter 8
https://erlsrnby04.github.io/2024/10/31/C-现代C-语言核心特性解析-Chapter-8/
作者
ErlsrnBy04
发布于
2024年10月31日
许可协议