一、c++11中的数据存储持续性
1.自动存储持续性:在函数定义中声明的变量,包括函数参数。
2.静态存储持续性:在函数外定义的变量和用关键字static定义的变量。作用域:程序整个运行过程中。
①外部链接性 ②外部链接性 ③无链接性
3.线程存储持续性:使用关键字thread_local 声明的。
4.动态存储持续性:使用new 分配的内存将一直存在直到delete将其释放为止。
二、作用域和链接性
1.作用域(scope):描述名称在文件的多大范围可见。
2.链接性(linkage):描述名称如何在不同单元间共享。
链接性为外部的名称可在文件间共享,链接性为内部的名称只能由一个文件中的函数共享。自动变量没有连接性。
三、静态持续变量
int global=10; //external linkage
static int one_file=5; //internal linkage
void function()
{
static int count=0; //no linkage
}
1.count变量(静态局部变量):没有链接性,作用域为局部,只能在函数内部使用。函数执行前count已经在内存中开辟空间。
2.global变量(外部变量或者全局变量):外部链接性,持续性为静态,作用域为整个文件,可以在程序的其他文件中使用。
3.one_file变量(静态全局变量):内部链接性,作用域为整个文件,只能在当前文件中使用。
静态变量的特点:未被初始化的静态变量的所有位都被设置为0,叫做零初始化(zero-initialized)。
四、静态持续性、外部链接性(全局变量):在代码块外部声明,在其他文件中使用时要使用extern声明
链接性为外部的变量称为外部变量,存储持续性为静态,作用域为整个文件。在每个使用外部变量的文件中必须声明它,遵循单定义规则。
1.定义声明(definiing declaration ):给变量分配存储空间。
例如 int number=10;
或者等效于 extern int number=10;
2.引用声明(referencing declaration):不分配存储空间,引用已有的变量。使用关键字extern 修饰,不进行初始化。
例如 extern int number;
五、静态持续性、内部链接性(静态全局变量):使用static在代码块外部定义
六、静态持续性,无链接性(静态局部变量):使用static 在代码块中定义的变量。
静态局部变量的特点是只在程序启动时初始化一次,以后再调用函数时不再初始化。