1、struct是任意类型元素构成的序列。
struct Address{
const char* name; //"Jim Dandy"
int number; //61
const char* street; //"South St"
const char* town; //"New Providence"
char state[2]; //'N''J'
const char* zip; //"07974"
};
2、声明Address类型的变量与声明其他变量的方式一模一样。我们可以用(.)点运算符为每个成员赋值。
void f()
{
Address jd;
jd.name = "Jim Dandy";
jd.number = 61;
}
3、struct类型能使用{}的形式初始化。
Address jd = {
"Jim Dandy",
61, "South St",
"New Providence",
{'N', 'J'}, "07974"
};
4、我们通常使用->运算符访问结构的内容。
void print_addr(Address* p)
{
cout << p->name << '\n'
<< p->number << '' << p->street << '\n'
<< p->town << '\n'
<< p->state[0] << p->state[1] << '' << p->zip << '\n';
}
5、我们也能以引用方式传递struct,并使用.运算符访问成员。
void print_addr2(const Address& r)
{
cout << r.name << '\n'
<< r.number << '' << r.street << '\n'
<< r.town << '\n'
<< r.state[0] << r.state[1] << '' << r.zip << '\n';
}
6、默认情况下,比较运算符(==和!=)等一些是是而非的操作并不使用于结构类型。当然,用户有权自定义这些运算符。
7、对象对齐,说的是一些特定类型的对象,沿着系统结构设定的边界分配空间。
8、struct类型名字只要已出现就能马上使用了,无须等到该类型的声明全部完成。但是只有等他的声明全部完成,才能声明它的对象。
9、struct是一种class,它的成员默认是public的。struct可以包含成员函数,尤其是构造函数。
10、对于两个struct来说,即使他们的成员相同,他们本身扔是不同的类型。
11、平凡构造函数,说的是当一个默认构造函数无须执行任何实际操作时,我们认为它是平凡的。标准布局类型,指的是与C语言的布局兼容的类型,并且应该能被常规的C++应用程序二进制接口(ABI)处理。
12、C++中,将能独立分配和寻址的最小对象组织在一起作为struct的域(field)。域也称为位域(bit-field)。
struct PPN{ //R6000物理页号
unsigned int PFN : 22; //页框编号
int : 3; //未使用
unsigned int CCA : 3; //缓存一致性算法
bool nonreachable : 1;
bool dirty : 1;
bool valid : 1;
bool global : 1;
};
13、联合,union是一种特殊的struct,它的所有成员都分配在同一个地址空间上。一个union实际占用的空间大小与其最大的成员一样。
14、union是一种特殊的struct,而struct是一种特殊的class。然而很多提供给类的功能与联合无关,因此对union施加了一些限制:
- union不能含有虚函数。
- union不能含有引用类型的成员。
- union不能含有基类。
- union的成员不能含有用户自定义的构造函数、拷贝操作、移动操作或者析构函数。
- union的所有成员中,最多只能有一个成员包含类内初始化器。
- union不能被用作其他类的基类。
15、在类成员中,没有命名的union是一个匿名联合。匿名联合是一个对象而非一种类型,我们无须对象名就能直接访问它的成员。
16、枚举类型用于存放用户指定的一组整数值。枚举类型的每种取值各自对应一个名字,这些值称为枚举值。
enum class Color { red, green, blue }
17、枚举类型分为两种:enum class,它的枚举值名字位于enum的作用域内,枚举值不会隐式地转换成其他类型。普通enum,它的枚举值名字与枚举类型本身位于同一个作用域中,枚举值会隐式地转换成整数。因此,更建议使用enum class。
18、enum class是一种限定了作用域的强类型枚举。
19、枚举常用一些整数类型表示,每个枚举值是一个整数。默认情况下,枚举值从0开始。
enum class Warning : int {green, yellow, orange, red}; //sizeof(Warning)==sizeof(int)
enum class Warning : char {green, yellow, orange, red}; //sizeof(Warning)==sizeof(char)
20、普通的enum,是指C++在提出enum class之前提供的枚举类型。普通的enum的枚举值位于enum本身所在的作用域中,他们隐式地转换成某些整数类型的值。