Croper 发表于 2018-12-16 02:05:25

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

感觉static好处多多啊,构造函数也只需要调用一次,返回的时候也不担心因为返回局部变量一不小心被析构了,如果把所有的局部变量都申明为局部静态变量,写成如static A;A=init_value;的形式,会有什么害处么?

理想小青年 发表于 2018-12-16 07:59:47

本帖最后由 理想小青年 于 2018-12-16 08:09 编辑

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

丶忘却的年少o 发表于 2018-12-16 13:42:42

在搞事情的时候最喜欢static类型,比如一个游戏保存血量写了个static变量,那直接上来就讲这个值改的巨大就可以达到不死的目的。
(以上是安全上考虑,其他请参考楼上说的)

Croper 发表于 2018-12-17 13:20:15

就拿静态变量的命名不规范来说,就有可能出现头文件包含错误、重定义等,
没太懂,局部静态变量无论你怎么命名也和局部变量一样,只有函数内部能调用吧。如果说是和什么关键字冲突的话即使是非静态的局部变量也会出现相同的问题吧。。能举个例子么

小酒酒呢 发表于 2018-12-17 21:04:09

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

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

a1372245671 发表于 2022-3-24 19:03:59

{:10_318:}

a1372245671 发表于 2022-3-24 19:25:52

{:10_318:}
页: [1]
查看完整版本: 所以把所有局部变量都加上static有什么害处么。。