内存模型(memory models)和命名空间(namespace)

时间:2021-02-24 00:36:16

继续《C++ premier plus 》

先来解释一下scope和linkage,所谓scope,是指变量的作用范围,所谓linkage,是指变量能否在不同文件*享

1,自动变量(automatic variable),local scope, no linkage

函数的参数,函数内定义的变量(未使用static限定),以及语句块中定义的变量,均为自动变量,自动变量具有local scope,即局部作用域,只在定义的函数或者块中起作用,当程序执行离开某个函数或区块时,其中的自动变量被释放(free)掉

2,静态变量(static variable),有三种external linkage,internal linkage and no linkage

静态变量只要程序在运行,就一直存在,不会被释放掉。声明external linkage的静态变量,要在所有函数或者区块外面声明即可,有file scope;要声明internal linkage的静态变量,在上述变量前面加上“static”限定符,有file scope;要声明no linkage的静态变量,在区块或者函数内声明static 类型的变量即可,有local scope。

3、const 加在全局变量前,该变量默认具有internal linkage,而不是external linkage

4、使用new创建的变量则不同于以上的情况,它会一直存在,直到程序结束,或者使用delete删除变量指向的内存。