目录
0.0 C++类型大致分为:
标量: int; float; char; bool; enum; void,nullptr_t; 指针;引用
复合体:数组;union;class/struct
0.1 根据生存期大致可分为:
静态:全局,static变量
自动:局部变量,类非静态数据成员
0.2 首先定义以下几种基本类型
union UNION_TYPE
{
short union_a;
int union_b;
};
enum ENUM_TYPE
{
monthday,sunday
};
class POD_TYPE
{
int a0;
double a1;
};
struct Object
{
static int static_ins;
float scalar_ins;
ENUM_TYPE enumins;
POD_TYPE pod_ins;
UNION_TYPE unionins;
char char_ins[2];
};
int Object::static_ins;
这些类型的初始化行为可以分为以下几种:
1. 默认初始化
语法:
T obj;
new T;
行为:
1.静态成员进行零初始化。
2.类裁决默认构造函数:用户默认造函数按规则进行初始化,隐式默认构造函数不进行初始化。
3. 数组每个成员都进行默认初始化。
3.其他情况都不进行初始化,其初始值未定义。
实验:
void defaultInitialize()
{
//scalar
static int static_ins;
int int_ins;
float float_ins;
bool bool_ins;
char char_ins;
ENUM_TYPE enumins;
long* prt_ins;
//combination
UNION_TYPE union_ins;
POD_TYPE pod_ins;
char array_ins[2];
Object obj;
return;
}
2.零初始化
1) 静态变量或线程局部变量初始化
2)值初始化的一部分
3.值初始化
语法:
//1.括号语法
T()
new T();
//T t(); 跟函数定义歧义,无此语法
//2.花括号语法
T{}
new T{}
T t{}
实验:
void valueInitialize()
{
//scalar
static int static_ins{};
int int_ins{};
float float_ins{};
bool bool_ins{};
char char_ins{};
ENUM_TYPE enumins{};
//combination
UNION_TYPE union_ins{};
POD_TYPE pod_ins{};
char array_ins[2]{};
Object obj{};
return;
}
行为:
1. 标量进行零初始化
2. 数组每个元素进行零初始化
2.类裁决默认构造函数:用户默认按构造函数规则进行初始化,隐式构造函数进行零初始化。