一、说明符和限定符
(1)auto(C++11中不再是说明符):用于自动类型推断;
(2)register:用于在声明中指示寄存器存储;
(3)static:当用于作用域为整个文件的声明中时,表示内部链接性;被用于局部声明中,表示局部变量的存储持续性为静态的;
(4)extern:表明是引用声明,即声明引用在其他文件定义的变量;
(5)thread_local(C++11新增):指出变量的持续性和所属线程的持续性相同;
(6)mutable
二、mutable
用mutable来指出,即使结构或类变量为const,它的某个成员也可以被修改。
例如:
struct data
{
char name[30];
mutable int access;
};
const data v = { "James", 10 };
strcpy(name, "John");//not allowed
v.access++;//allowed
三、const
1、在默认情况在全局变量的链接性为外部,但是const全局变量的链接性为内部,即C++看来,全局const定义就像static说明符一样。
const int x = 10;//same as static const int x=10;
int main()
{
cout << x << endl;
}
2、C++规定,将一组常量放在头文件中,并在同一个程序的多个文件中使用该头文件,则预处理器将头文件的内容包含到每个源文件中后,每个源文件都有类似下面的定义:
const int x=10;
只要两个源代码文件包含同一个头文件,则它们将获得同一组常量。
3、如果希望某个常量的链接性为外部的,可以使用extern来覆盖默认的内部链接性:
extern const int x=10;
四、动态分配
使用C++运算符new(或C语言中的malloc())分配的内存称为动态内存;
使用new来分配内存,相应地,使用delete来释放new分配的内存。