struct
:结构体
一般用于定义一组不同类型的数据。
定义
1 | struct structure_name |
以上代码声明了一个名为 structure_name
的结构体类型,其拥有三个成员。
结构体的成员可以是其他类型的结构体。 1
2
3
4
5struct structure_embed
{
int memb1;
structure_name memb2;
};
实例化
定义结构体时可以顺便实例化。
以上代码在定义结构体时同时实例化对象1
2
3
4
5
6struct structure_name
{
int member1;
char member2;
float member3;
} s;s
。
1 | // 创建一个 structure_name 类型的对象 s1 |
1 | structure_name s2{1, 'a', 1.0f}; |
以上写法利用了initializer_list
特性,自C++11
起受到支持,建议使用此种写法。
1 | structure_name s5{ .member3 = 1.0f }; |
以上写法自C++20
起受到支持。
访问对象成员
在结构体对象名后面加上.
运算符访问成员。
1
printf("%d\n", s2.member1); // 输出 s2 的 member1 成员
特别地,对于结构体指针,在指针后面可以加上->
运算符直接访问指针指向的对象的成员。
1
printf("%d\n", ps->member1);
对象成员赋值
1 | s1.member1 = 100; |
结构体赋值运算符
可以用=
运算符在同类型结构体间赋值。
1 | s1 = s3; |
匿名临时结构体
不填写结构体名字,结构体定义+实例化一次完成。
1 | struct |
enum
:枚举
在一个整型(默认为int
)的基础上,定义一系列相关的符号标志。
定义
1 | // 弱枚举 |
强枚举类型在 C++11
加入,更加安全严谨,建议使用强枚举代替枚举。
访问枚举
1 | // 访问弱枚举 |
1 | using enum UNIVERSITIES; |
以上using enum
写法自C++20
起受到支持。
实例化
强枚举类型不可隐式转换。
1 | // 弱枚举 |
修改枚举基础类型
1 | enum class ADC : short // 基于 short 类型的强枚举 |
union
: 共用体
占用相同内存空间的不同变量,曾用于节省空间。现在基本不用,只有很少模块使用,如C++ socket
编程。
定义
1 | union value |
占用最大成员大小的空间。
使用
1 | value v; |