第九章 C++PrimerPlus 内存模型和名称空间
1.在大型工程中,如果只修改了一个文件,则只重新编译该文件,然后将它与其他文件的编译版本连接即可。这样做可以节省时间,显然重新编译整个工程的代价太大。
2.不要讲函数定义或变量声明放到头文件中。因为这样做,每当其他文件#include“该头文件名“时,这些变量或者函数定义都会被引入到其他文件中,会造成多次定义的情况。注意,这里使用双引号而不是尖括号,因为尖括号是从标准库中查找,而双引号是从工程目录中查找(即自己写的)。
3.在同一个文件中只能将同一个文件包含一次。但是很可能在不知情的情况下将头文件包含多次。因为,很可能使用了包含了另外一个头文件的头文件。在c/c++中解决这种问题的方法是使用#ifndef
4.c和c++也为静态存储持续性变量提供了3种链接性:外部链接性(可在其他文件中使用)、内部链接性(只能在当前文件中访问)、无连接性(只能在当前函数或代码快访问)。静态变量的数目在程序运行期间是不变的,因此不需要使用栈来管理,编译器将分配固定的内存块来存储所有的静态变量,这些变量在整个程序运行期间一直存在。
静态变量是变量,所谓静态只是规定其作用域,还有就是说明它在程序的执行过程中一直存在于内存。属于变量,可以动态初始化,注意和常量的定义有所区分。
5.外连接性 ,在其他文件中使用在文件B中定义的全局变量int a = 0时,只需要使用引用关键字extern int a; 即可注意,如果在B中有全局变量a 的定义,则extern int a;不再重新分配空间,否则重新分配。
无连接性,
静态局部变量只初始化一次,并且可以保存值。
6.const int a = 0;定义在函数外的时候,它的链接性是内部的,这是因为const改变了全局变量的链接性,如果想让全局常量的链接性为外部的,则要定义为extern const int a = 0;
7.函数的链接性默认是外部的,当然可以使用static将其设置成内部的。
8.默认情况下,名称空间中声明的名称的链接性是外部的(除非它引用了常量)