有关C++ 实现时extern 和const的问题

本文探讨了C++中const常量的文件间共享问题,由于编译时const对象会被替换为它们的值,导致默认情况下const变量不是文件间共享的。通过在定义const变量时添加extern关键字,可以实现文件间的共享而避免重复定义。文章通过实例展示了如何正确使用extern和const,解释了extern的作用以及其与const结合使用时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎样把const常量实现文件间共享?
之所以会先提起这个问题,当然和要解决的问题息息相关。你也许不禁会问:难道const常量不是文件间共享的吗?当然不是,原因是const常量的特殊性。下面我们看看c++ primer的作者怎么说的(重点!):
/——–
当以编译时初始化的方式定义一个const对象时,例如:
const int bufSize = 512;
编译器将在编译过程中把用到该变量的地方都替换成对应的值,也就是说编译器会找到程序中所有用到bufSize的地方,然后用512替换。
为了执行上述替换,编译器必须知道变量的初始值。如果程序包含多个文件,则每个用了const变量的文件都必须得能访问到他的初始值才行。要做到这一点就必须在每一个用到这个量的文件中都对他有定义。为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效(即不是文件间共享的)。从而,当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。
——–/
作者说的很清楚,const变量在不同文件中自己是自己的互不相干!但是程序的写法千变万化,总会有例外的需求,所以:
/——-
某些时候有这样一种const变量,他的初始值不是一个常量表达式,但确实有必要再文件间共享。这种情况下,我们不希望编译器为每个文件分别生成独立的变量。想反,我们想让这些const对象像其他对象(非常量)一样工作(即在文件间共享),也就是说只在一个文件中定义,而在其他多个文件声明并使用它。
——-/
下面给出解决方法:
对const变量不管声明还是定义都添加extern关键字,这样只需要定义一次就可以了。
对解决方法的认识:
其实就是在定义const变量的时候显式的用extern说明了我定义的这个常量是要在文件间共享的,而非默认情况下的当前文件独有。这样的话仅在其他文件中声明一下就可用同一个const变量,这正实现了和其他变量定义声明实现的相同效果!
下面来一个例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值