- 5种变量存储方式
存储描述 | 持续性 | 作用域 | 链接性 | 如何声明 |
---|---|---|---|---|
自动存储 | 自动 | 代码块 | 无 | 在代码块内 |
寄存器 | 自动 | 代码块 | 无 | 在代码块内,使用关键字register |
静态,无链接性 | 静态 | 代码块 | 无 | 在代码块内,使用关键字static |
静态,外部链接性 | 静态 | 文件 | 外部 | 不在任何函数内 |
静态,内部链接性 | 静态 | 文件 | 内部 | 不在任何函数内,使用关键字static |
静态变量有默认的零初始化
对于静态,外部链接性的变量,只能在一个程序文件里定义,其他文件只能通过
extern
声明
//file1.cpp
int a=1;
//file2.cpp
extern a;
存储说明符:
register
,static
,extern
,thread_local
,mutable
cv-限定符:
const
,volatile
:即使程序不改变某变量,该变量的值仍可能变化。如硬件改变内存变量mutable
:即使某结构变量或类是const
,某个成员仍可变const int a=1;
:使得a
的链接性是内部的,跟static
一样。如果希望链接性是外部的,应该extern const int states = 50;
。在头文件里考虑这些情况的应用场景函数的链接性:函数默认是外部链接的。如果希望是内部链接,则
static int go(int a); //定义声明都要加上static
static int go(int a)
{
...
}
内联函数不受 单定义 的约束。可以在头文件中定义
动态内存:
int *pi = new int(6);
struct where{int x; int y;};
where *one = new where{1,2};
int[] ar = new int[4] {1,2,3,4};