这篇文章主要介绍“C++如何避免非常数全局变量”,在日常操作中,相信很多人在C++如何避免非常数全局变量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何避免非常数全局变量”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
公司主营业务:网站设计制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出宁河免费做网站回馈大家。
非常数全局变量会隐藏依赖关系并导致依赖对象不可预知地被修改。
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等。
(简易)报告所有定义在命名空间范围的非常数变量。
到此,关于“C++如何避免非常数全局变量”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!