添加位域、修改 volatile

This commit is contained in:
Menghui Xie 2018-06-20 16:35:55 +08:00
parent b2059f1a48
commit ee9e1b00e5

View File

@ -90,17 +90,6 @@ int* const function7(); // 返回一个指向变量的常指针使用i
</details>
### volatile
```cpp
volatile int i = 10;
```
* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。
* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)
* const 可以是 volatile (如只读的状态寄存器)
* 指针可以是 volatile
### static
#### 作用
@ -150,7 +139,7 @@ inline int functionName(int first, int secend,...) {/****/};
</details>
#### 编译器对inline函数的处理步骤
#### 编译器对 inline 函数的处理步骤
1. 将 inline 函数体复制到 inline 函数调用点处;
2. 为所用 inline 函数中的局部变量分配内存空间;
@ -263,6 +252,29 @@ struct test
</details>
### 位域
```cpp
Bit mode: 2; // mode 占 2 位
```
类可以将其非静态数据成员定义为位域bit-field在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时通常会用到位域。
* 位域在内存中的布局是与机器有关的
* 位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定
* 取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域
### volatile
```cpp
volatile int i = 10;
```
* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。
* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)
* const 可以是 volatile (如只读的状态寄存器)
* 指针可以是 volatile
### extern "C"
* 被 extern 限定的函数或变量是 extern 类型的