(1) union(共用体)对内存要求特别严格的地方,union会频繁出现,在union中,各成员共享一段内存空间
一个union变量的长度等于各成员中最长的长度。
共享:指该共用体变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。
anonymous union(匿名共用体):共用体没有任何类型和变量名。
void main() { union { int i; float j; } i = 12; j = 1.22f; } (2) default arguments (C不支持) ①默认参数只可在函数声明中设定一次 ②如果一个参数设定了缺省值时,其右边的参数都要有缺省值 ③默认值可以是全局变量、全局常量、函数,但不能是一个局部变量 (3) placeholder argument(占位符参数) C不支持 ⓵占位符参数调用必须为占位符提供一个值 ⓶占位符参数目的是可以修改函数定义而不需要修改所有的函数调用 ⓷当含占位符参数函数作为接口时,后期使用此占位符,接口不变
(4) magic number
float radius = 3.0f; float perimeter = radius*3.14;
没有特别说明3.14这个数字很魔幻,导致代码可读性差,修改不方便。
应该将其定义为常量、枚举类型或宏定义,不要在代码中直接使用特定的数值。
特定情况下,可用于观察和调用程序中出现的错误。0xcdcd是微软C++ Debug运行库为没有初始化的堆内存所做的标记;0xcccc是为未初始化的栈内存所做的标记。
(5) Aggregate(聚合体)
⓵最大的特点是可以直接使用{}括起来的初始化列表进行初始化,不能有用户自定义的构造函数,不能有private和protected权限,不能有基类和虚函数。
⓶未知大小的数组可以用包含n个元素的初始化列表初始化。例如:int x[] = {1, 2, 3};
⓷结构的Aggregate中如果包含静态成员变量,在初始化列表中不考虑该变量。
struct A { int i; static int s; int j; } a = {1, 2};//这里初始化的是a.i和a.j⓸初始化列表中的元素的个数少于Aggregate成员的个数,未明确指出的Aggregate成员将被默认初始化。
⓹出事化列表可以初始化union,但只能初始化其第一个元素。
