千家信息网

C++如何避免非常数全局变量

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"C++如何避免非常数全局变量",在日常操作中,相信很多人在C++如何避免非常数全局变量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++如何避免非常
千家信息网最后更新 2025年01月23日C++如何避免非常数全局变量

这篇文章主要介绍"C++如何避免非常数全局变量",在日常操作中,相信很多人在C++如何避免非常数全局变量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++如何避免非常数全局变量"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

避免非常数全局变量

Reason(原因)

非常数全局变量会隐藏依赖关系并导致依赖对象不可预知地被修改。

Example(示例)

struct Data {    // ... lots of stuff ...} data;            // non-const data
void compute() // don't{ // ... use data ...}
void output() // don't{ // ... use data ...}

译者注:全局变量可以被任何代码看到,也就可能被任何代码修改。如果变量命名时没有特殊的规则,这种问题就会更加难以解决。

Note(注意)

全局常量是有用的。

Note(注意)

针对全局变量的规则同样适用于命名空间范围的变量。

可选项:如果你使用全局(更普遍的情况是命名空间范围)数据来避免拷贝,考虑通过一个const类型的参照进行传递。另一个解决方案是将数据定义成某些对象的状态并将操作定义为成员函数。

译者注:第一种情况时,使用const参照的代码无法改写全局变量的内容,这样就可以限制对全局变量的修改;第二种情况可以通过成员函数控制和检查针对全局数据的修改。

警告:小心数据竞争。如果两个线程访问同一个数据(可以是全局的或者或者通过参照传递的),就可能出现数据竞争。每一个指向可修改数据的指针或者引用都可能发生数据竞争。

Note(注意)

你没有办法让不可修改的数据发生数据竞争。

Note(注意)

这条准则是"避免"而不是"禁止使用"。当然存在(很少)例外情况。例如:cin,cout和cerr等。

以译者注:"避免"可以理解为如果可能就不用。

Enforcement(实施建议)

(简易)报告所有定义在命名空间范围的非常数变量。

到此,关于"C++如何避免非常数全局变量"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0