结构体
声明:结构体名字,名称,
不完全类型:无法实例化,可以定义指针
定义:结构体内存结构,申请内存
翻译单元级别:在编译的时候只有一处定义,不同的cpp可以有各自的一种定义
结构体初始化:
类内初始化/聚合初始化/指派初始化
struct Str; //结构体声明
//结构体定义,包含结构体的内存结构
struct Str
{
int x = 3;//类内初始化
int y;
};
int main()
{
Str m_str{3,4};//聚合初始化,按顺序赋值,未赋值的缺省为0
Str m_str{.x=3,.y=4}; //c++20,指派初始化,避免聚合初始化由于类结构调整导致赋值错误
}
mutable限定符
可以改变常量结构体内成员的值
struct Str
{
mutable int x=0;
int y = 1;
}
int main()
{
const Str m_str;
m_str.x = 3;
}
静态数据成员
多个对象共享的数据成员
struct Str
{
static int x;
static const int array_size = 0;//const对象类内初始化,在数组声明时,需要确定array_size的值
int buffer[array_size];
int y = 1;
};
int Str::x; //类外定义
int main()
{
Str m_str1;
Str m_str2;
m_str1.x = 100; //x是静态数据成员,所以m_str1与m_str2的值相同
}
heap:动态申请的内存
stack:临时变量存储区域,virtual pointer