导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

const限定符的基本介绍

Posted on   抑或  阅读(106)  评论(0编辑  收藏  举报

有时我们会定义这样一种变量,它的值不能被改变。例如用一个变量来表示缓冲区的大小,使用变量的好处是很容易对其进行调整,但为了防止程序可能改变这个值,可以用const对变量的类型加以限定:

const int bufSize =512;//输入缓冲区大小

这样就把bufSize定义成了一个常量。任何试图改变bufSize的行为都将引发错误

因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。const int k;//错误,k是一个未经初始化的常量

初始化和const

对象的类型决定了其上的操作。与非const类型所能参与的操作相比,const类型的对象能完成其中大部分,但也不是所以的操作都适合。主要的限制就是只能在const类型的对象上执行不改变其内容的操作。例如,const int和普通的int 一样都能参与算术运算,也都能转换成一个布尔值,等等。

在不改变const对象的操作中还有一种是初始化,如果利用一个对象去初始化另一个对象,则他们是不是const都无关紧要:

int i= 42;

const int ci=i;

int j=ci;

默认状态下const对象仅在文件内有效

当以编译时初始化的方式定义一个const对象时,编译器将在编译过程中把用到该变量的地方都替换成对应的值。为了执行上述替换,编译器必须知道变量的初始值。如果程序包含多个 文件则每个用了const 对象的文件都必须得能访问到他的初始值才行。要做到这一点,就必须在每一个用到变量的文件中都有对它的定义。为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效。当多个文件中同时出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。

某些时候有这样一种const 变量,它的初始值不是一个常量表达式,但又确实有必要再文件中共享。这种情况下,我们不希望编译器为每个文件分别生成独立的变量。相反我们想要让这类const对象像其他(非常量)对象一样工作,也就是说,只在一个文件中定义const,而在多个文件中声明并使用它。

解决的办法是,对于const变量不管是声明还是定义都添加extern关键字,这样只需要定义一次就行了:

//file_1.cc定义并初始化了一个常量,该常量能被其他文件访问

extern const int bufSize=fcn();

//file_1.h头文件

extern const int bufSize;//与file_ 1.cc中定义的bufSize是同一个

如上述程序所示,file_1.cc定义并初始化了bufSize。因此这条语句包含了初始值,所以它(显然)是一次定义。然而,因为bufSize是一个常量,必须用extern加以限定使其被其他文件使用。

file_1.h头文件中的声明也由extern做了限定,其作用是指明bufSize并非本文件所独有,它的定义将在别处出现。

note:如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字。

努力加载评论中...
1
点击右上角即可分享
微信分享提示