diff --git a/README.md b/README.md index 0bbe348..891be10 100644 --- a/README.md +++ b/README.md @@ -90,17 +90,6 @@ int* const function7(); // 返回一个指向变量的常指针,使用:i -### 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,...) {/****/}; -#### 编译器对inline函数的处理步骤 +#### 编译器对 inline 函数的处理步骤 1. 将 inline 函数体复制到 inline 函数调用点处; 2. 为所用 inline 函数中的局部变量分配内存空间; @@ -263,6 +252,29 @@ struct test +### 位域 + +```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 类型的