本部分罗列了本章的难点或注意点,以便复习巩固或者回忆,关注私聊我可以免费领取pdf版C++ Primer Plus 第6版。
-
头文件常包括的内容。函数原型、使用#define或const定义的符号常量、结构声明、类声明、模板声明、内联函数。
-
同一个文本中只能将用一个头文件包含一次
-
auto以前用于默认为自动的变量,C++11中不再合法。
-
C++11中register的作用也失去了,只是显示地指出变量是自动的。
-
链接性用于描述文件间的共享
-
自动存储 没有链接性 函数中声明的函数参数和变量 栈 创建时值是不确定的 P310
-
静态存储 外部链接性(全局变量)、内部链接性(static修饰的全局变量)、无链接性(static修饰的局部变量) 固定的内存块 创建时用0填充 整个函数执行期间都存在
-
静态变量的初始化 分为静态初始化(零初始化和常量表达式{能使用sizeof}初始化)和动态初始化(在编译后初始化,比如要调用某个函数来计算)
-
c++11新增关键字constexpr
-
变量声明:定义声明(分配内存空间) 引用声明(不分配内存空间)
-
作用域解析运算符(::)放在变量名前面,该运算符表示用变量的全局版本。
-
同名时,静态变量能隐藏常规外部变量
-
静态变量只会进行一次初始化
-
说明符 auto(C++不再是) register static extern thread_local(C++11新增) mutable
-
c-v限定符 const volatile
-
volatile表示内存单元的值可能发生变化 当编译器读取某个值两次,会优化操作,将值缓存到寄存器中,导致读到的值不变。volatile使编译器不做这种优化。
-
mutable 能让const结构或类的某个成员可以被修改
struct data { char name[30]; mutable int accesses; } const data da1 = {"as",12}; da1.accesses++; //valid
-
在c++(不是c)中,const对默认存储类型也有影响,const全局变量的链接性是内部的。
-
函数也具有链接性
-
语言链接性
extern “C” void spiff(int); extern "C++" void spiff(int);
-
new初始化 可以用(){}
-
new还可以作为定位new运算符能够指定要使用的位置
struct chaff{ char dross[20]; int slag; } char buffer1[50]; char buffer2[500]; int main(){ chaff *p1,*p2; int *p3,*p4; p1 = new chaff; p3 = new int[20]; p2 = new (buffer1) chaff; p4 = new (buffer2) int[20]; }
-
利用定位new运算符有可能不需要delete