笔记——C++变量的存储持久性、可见性、链接性

停停停,学的越来越离谱了。

我们必须再次审视一下问题,尽可能清晰全面一点。

  1. 假如,我想多文件使用一组变量,我该如何实现?

例如,01.h,02.h,01.cpp,02.cpp,main.cpp都要用到a变量

假如我在01和02的cpp文件都要使用变量a,我可以在对应的.h文件中使用引用声明extern(此时未开内存)且不进行初始化,

如果在01.cpp文件中我定义一个a(此时开内存了)并且为它赋值(例如100),那么如果在01或02的cpp文件里不在修改,

那它的值就固定了,就是100

  1. 假如,我想多文件使用一组常量,我该如何实现?

就是1问题的操作,外加一个const

  1. 在问题2的基础上,假如,我不加extern呢?

在01和02的cpp文件都要使用常量a,我可以在对应的.h文件中使用定义:const int a = 100;

然后在包含进main函数使用,那么,在mian文件中,将包含进去两条,const int a = 100;

这将违反但定义原则。对于问题1,不使用const同样解释,同样出错

  1. 那static呢?他有什么用?

在全局变量上,似乎没有什么影响,仍然是01.h文件定义一个static int a = 100;

,02.h文件再定义一次的话,main.cpp文件启动了就仍然是重定义。那为什么有内部链接性呢?什么是当前翻译的单元可见?

内部链接性就是说,当在一个文件里定义一个static变量后,那么别的文件无法通过同名的引用声明(带extern)来访问它,

它只在static的文件访问。

//总结

  1. 那也就是说,对于一个全局的变量,它必然存活到程序结束,如果你想多文件访问它,

那你就在某个文件中定义(开内存,赋值)它,在使用它的文件里使用引用声明(不开内存,引用它)来访问它(更多是从常量的角度出发),

当然也可以反过来用:在用到的文件里先声明它,然后通过定义(开内存,赋值)同名变量,来使用这块内存(更多是从变量的角度出发)

但无论从哪个角度出发,extern的变量都是全局变量,都在全局的内存区域存着

至于出现的重定义(违反单定义原则)问题,那就是多文件定义同名变量,只要对同名变量没有在第二次使用extern的都会出错

特别是多文件的时候要注意

  1. 代码块内部定义一个变量加一个static有什么用?

除了活得更久,如果能取到内存的话。。。访问不了,无法解析。。。

思考一下,好比01.h和02.h文件都有extern int a;,然后,在01.cpp和02.cpp都有先定义和修改定义a的函数,

那么在main函数,多次交替调用修改函数,a的内存变不变??

  1. 果然,对应的.cpp文件也不可以定义它,现在我在main函数定义它,在1.cpp和02.cpp只有修改它的值的函数
  2. 果然,内存开在一个空间(因为就开了一次开多次不允许😂),值也被修改了。
  3. 那如果,定义的是在方法内部呢??会奏效吗??
    1. 我去,开的内存还是那一块,也就是说,extern是优先的,定义也只能在代码块外部定义,否则不行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值