gpt4 book ai didi

c++ - 在 C++ (C) 中使用全局范围对象(结构)是否可以?

转载 作者:行者123 更新时间:2023-11-28 05:01:25 25 4
gpt4 key购买 nike

众所周知,不必要地使用全局变量是一种坏习惯,并且有一种趋势是使范围尽可能小。

但是对象呢?或者在 C 中构造类似函数的实例化。跨多个源文件使用全局对象有什么问题吗?

感谢您阐明了这个问题,因为我只是有点……错乱了。

最佳答案

总结

全局标量类型变量是一种工具,工具没有好坏之分,使用合适不合适。为该工具添加类的功能并无好坏之分,它有可能提高适用性或降低适用性。

对象

答案需要对象的定义。对象不是变量的补集。变量的补码是常数。我将使用“标量类型”作为对象的补充。

使用全局标量类型变量的问题

看来全局变量的问题一般都是顺带的

  • 非本地
  • 没有约束检查
  • 耦合
  • 并发问题
  • 命名空间污染
  • 测试和调试

我认为,只要我们谈论标量类型的内存占用,至少对于 PC 来说,这是一个被认为过时的论点,嵌入式可能是另一回事。

备注:常量没有所有这些问题,这就是为什么全局常量比全局变量更常见。

使用全局对象的问题

你必须问问自己是否可以通过使用对象而不是标量类型变量来消除这些问题

所有这些问题也适用于对象。

此外,他们在最上面添加了类的所有复杂性,并使每一个反对意见都变得更糟,至少在一般情况下是这样。

有了对象,你就有了更多的位置来破坏一切,只有一些位置更多地阻碍了副作用的调试。对象有变得更复杂的趋势,增加了潜在的一致性初始化问题。

对于对象,您突然不仅需要管理访问与否,而且还必须确保每个访问点都与对象的当前接口(interface)和底层数据类型的约束兼容。确保程序的某些部分正确管理所有权。

我认为这不是意见问题:如果您认为全局标量类型变量不好,您就不得不认为全局对象更坏。

暨花岗岩

当然,全局标量类型变量和全局对象都有正当且完全合理的应用。

如果几个全局变量在逻辑上相互关联,我认为将这些关联捆绑在一个全局对象中可能会解决一些反对意见。例如。当您在对象中移动一些全局标量类型变量时, namespace 污染当然会减少。如果这些变量中存在不变量,那么全局对象的类当然是您首先要寻找的地方,而类绝对是编写该不变量的最佳位置。 Setter 可能是解决缺少约束问题的工具。

关于c++ - 在 C++ (C) 中使用全局范围对象(结构)是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com