C++中const限定符对存储类型的影响

C++中const限定符对存储类型的影响

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

const int fingers = 10; //same as static const int fingers=10;
int main(void)
{
    ...
}

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

const int fingers = 10;
const char * warning = "Wak!";

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

// extern would be required if const had external linkage
extern const int fingers; //can't be initialized
extern constchar * warning;

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

内部链接性还意味着,每个文件都有自己的一组常量,而不是所有文件共享一组常量。每个定义都是其所属文件私有的,这就是能够将常量定义放在头文件中的原因。这样,只要在两个源代码文件中包括同一个头文件,则它们将获得同一组常量。
如果出于某种原因,程序员希望某个常量的链接性为外部的,则可以使用 extem 关键字来覆盖默认的内部链接性:

extern const int states = 50; // definition with external linkage

在这种情况下,必须在所有使用该常量的文件中使用extem 关键字来声明它。这与常规外部变量不同,定义常规外部变量时,不必使用 extem 关键字,但在使用该变量的其他文件中必须使用exter。然而,请记住,鉴于单个 const在多个文件之间共享,因此只有一个文件可对其进行初始化。在函数或代码块中声明const 时,其作用域为代码块,即仅当程序执行该代码块中的代码时,该常量才是可用的。这意味着在函数或代码块中创建常量时,不必担心其名称与其他地方定义的常量发生冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值