鱼C论坛

 找回密码
 立即注册
查看: 2653|回复: 6

所以把所有局部变量都加上static有什么害处么。。

[复制链接]
发表于 2018-12-16 02:05:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
感觉static好处多多啊,构造函数也只需要调用一次,返回的时候也不担心因为返回局部变量一不小心被析构了,如果把所有的局部变量都申明为局部静态变量,写成如static A;A=init_value;的形式,会有什么害处么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-16 07:59:47 | 显示全部楼层
本帖最后由 理想小青年 于 2018-12-16 08:09 编辑

有坏处啊,局部变量没有必要全部都加上static,除非你想下一次在调用这个函数,那个局部变量的数据是上一次的结果(被保存起来),可以使用static。
否则的话,局部变量应该是随着函数,准确来说被调用函数生命周期(作用域),消亡即可,不用static.
static如果多而乱,引用不当会出现各种BUG, 如果管理比较好多而有序,可能不用担心。
比如你写个网络编程聊天室,不同的类中有很多static,先不说BUG吧,先说说最简单的问题。如果管理不好元素,就拿静态变量的命名不规范来说,就有可能出现头文件包含错误、重定义等,就会很麻烦。
这个的话static int A;A=init_value  保存一些局部变量没问题,些可以写成类的私有成员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-16 13:42:42 | 显示全部楼层
在搞事情的时候最喜欢static类型,比如一个游戏保存血量写了个static变量,那直接上来就讲这个值改的巨大就可以达到不死的目的。
(以上是安全上考虑,其他请参考楼上说的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-17 13:20:15 | 显示全部楼层
就拿静态变量的命名不规范来说,就有可能出现头文件包含错误、重定义等,

没太懂,局部静态变量无论你怎么命名也和局部变量一样,只有函数内部能调用吧。如果说是和什么关键字冲突的话即使是非静态的局部变量也会出现相同的问题吧。。能举个例子么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-17 21:04:09 | 显示全部楼层
Croper 发表于 2018-12-17 13:20
没太懂,局部静态变量无论你怎么命名也和局部变量一样,只有函数内部能调用吧。如果说是和什么关键字冲突 ...

静态局部变量  并不支持跨函数访问,但是所有的静态变量都是保存在一个静态区,和全局变量保存的位置是一样的。也就是说  在程序结束之前,其内存空间都是属于该程序的,这一点和全局变量相同。如果把他当做局部变量使用,必然就是浪费内存喽,并且存在安全问题,其值有可能被恶意修改(如果是稍大点的项目)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-24 19:03:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-24 19:25:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 05:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表