设为首页 加入收藏

TOP

9.2.7 说明符和限定符(1)
2013-10-07 15:43:34 来源: 作者: 【 】 浏览:69
Tags:9.2.7 说明 符和 限定

9.2.7  说明符和限定符(1)

有些被称为存储说明符(storage class specifier)或cv-限定符(cv-qualifier)的C++(www.cppentry.com)关键字提供了其他有关存储的信息。下面是存储说明符:

auto(在C++(www.cppentry.com)11中不再是说明符);

register;

static;

extern;

thread_local(C++(www.cppentry.com)11新增的);

mutable。

其中的大部分已经介绍过了,在同一个声明中不能使用多个说明符,但thread_local除外,它可与static或extern结合使用。前面讲过,在C++(www.cppentry.com)11之前,可以在声明中使用关键字auto指出变量为自动变量;但在C++(www.cppentry.com)11中,auto用于自动类型推断。关键字register用于在声明中指示寄存器存储,而在C++(www.cppentry.com)11中,它只是显式地指出变量是自动的。关键字static被用在作用域为整个文件的声明中时,表示内部链接性;被用于局部声明中,表示局部变量的存储持续性为静态的。关键字extern表明是引用声明,即声明引用在其他地方定义的变量。关键字thread_local指出变量的持续性与其所属线程的持续性相同。thread_local变量之于线程,犹如常规静态变量之于整个程序。关键字mutable的含义将根据const来解释,因此先来介绍cv-限定符,然后再解释它。

1.cv-限定符

下面就是cv限定符:

const;

volatile。

(读者可能猜到了,cv表示const和volatile)。最常用的cv-限定符是const,而读者已经知道其用途。它表明,内存被初始化后,程序便不能再对它进行修改。稍后再回过头来介绍它。

关键字volatile表明,即使程序代码没有对内存单元进行修改,其值也可能发生变化。听起来似乎很神秘,实际上并非如此。例如,可以将一个指针指向某个硬件位置,其中包含了来自串行端口的时间或信息。在这种情况下,硬件(而不是程序)可能修改其中的内容。或者两个程序可能互相影响,共享数据。该关键字的作用是为了改善编译器的优化能力。例如,假设编译器发现,程序在几条语句中两次使用了某个变量的值,则编译器可能不是让程序查找这个值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在这两次使用之间不会变化。如果不将变量声明为volatile,则编译器将进行这种优化;将变量声明为volatile,相当于告诉编译器,不要进行这种优化。

2.mutable

现在回到mutable。可以用它来指出,即使结构(或类)变量为const,其某个成员也可以被修改。例如,请看下面的代码:

 

veep的const限定符禁止程序修改veep的成员,但access成员的mutable说明符使得access不受这种限制。

本书不使用volatile或mutable,但将进一步介绍const。

3.再谈const

在C++(www.cppentry.com)(但不是在C语言)中,const限定符对默认存储类型稍有影响。在默认情况下全局变量的链接性为外部的,但const全局变量的链接性为内部的。也就是说,在C++(www.cppentry.com)看来,全局const定义(如下述代码段所示)就像使用了static说明符一样。

 
C++(www.cppentry.com)修改了常量类型的规则,让程序员更轻松。例如,假设将一组常量放在头文件中,并在同一个程序的多个文件中使用该头文件。那么,预处理器将头文件的内容包含到每个源文件中后,所有的源文件都将包含类似下面这样的定义:
 
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.2.7 说明符和限定符(2) 下一篇9.3.2 新的名称空间特性(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)