说明符和限定符

来源:互联网 发布:年轻人牙膏知乎 编辑:程序博客网 时间:2024/05/16 12:09

有些被称为存储说明符或cv-限定符的C++关键字提供了其他有关存储的信息。

存储说明符:

1)auto(在C++中不再是说明符)

2)register

3)static

4)extern

5)thread local(C++11新增的)

6)mutable

1 cv-限定符

下面就是cv限定符
1)const
2)volatile
关键字volatile表明,即使程序代码没有对内存单元进行修改,其值也可能发生变化。该关键字的作用就是为了改善编译器的优化能力。

2 mutable

可以用它来指出,即使结构(或类)变量为const,其某个成员也可以被修改。例如:


3再谈const

在C++中,const限定符对默认存储类型稍有影响。在默认情况下全局变量的链接性为外部的,但const全局变量的链接性为内部的。也就是说,在C++看来,全局const定义就像是有了static说明符一样。

C++修改了常量类型的规则,让程序员更轻松。例如,假设将一组常量放在头文件中,并在同一个程序的多个文件中使用该头文件。那么,预处理器将头文件的内容包含到每个源文件中后,所有的源文件都将包含类似下面这样的定义:
const int fingers=10;
const char *warning="wak";

如果全局const声明的链接性像常规变量那样是外部的,则根据单定义规则,这将出错。也就是说,只能有一个文件可以包含前面的声明,而其他文件必须使用extern关键字来提供引用。另外,只有未使用extern关键字的声明才能进行初始化:
extern const int fingers;
extern const char *warning;

因此,需要为某个文件使用一组定义,而其他文件使用另一组声明。然而,由于外部定义的const数据的链接性为内部的,因此可以在所有文件中使用相同的声明。

内部链接性意味着,每个文件都有自己的一组常量,而不是所有文件共享一组常量。每个定义都是其所属文件私有的,这就是能够将常量定义放在头文件中的原因。这样,只要在两个源代码文件中包括同一头文件,则它们将获得同一组常量。
0 0
原创粉丝点击