C++ 在C+中使用全局范围对象(结构)可以吗+;(C) ??

C++ 在C+中使用全局范围对象(结构)可以吗+;(C) ??,c++,object,C++,Object,我们都知道,不必要地使用全局变量是一种坏习惯,而且有一种趋势是将范围保持尽可能小 但是物体呢?或者C中类似函数的结构实例化。跨多个源文件使用全局对象有什么问题吗 谢谢你告诉我这个问题,因为我刚刚有点。。。损坏。总结 全局标量类型变量是一种工具,工具不好也不坏,它们的使用是适当的还是不适当的。向该工具添加类的功能不是好的,也不是坏的,它有可能提高适当性或恶化适当性 物体 答案需要对象的定义。宾语不是变量的补语。变量的补码是常量。我将使用“标量类型”作为对象的补充 使用全局标量类型变量的问题 看来,

我们都知道,不必要地使用全局变量是一种坏习惯,而且有一种趋势是将范围保持尽可能小

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

谢谢你告诉我这个问题,因为我刚刚有点。。。损坏。

总结 全局标量类型变量是一种工具,工具不好也不坏,它们的使用是适当的还是不适当的。向该工具添加类的功能不是好的,也不是坏的,它有可能提高适当性或恶化适当性

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

使用全局标量类型变量的问题 看来,全局变量的问题大体上是有问题的

  • 非局部性
  • 无约束检查
  • 耦合
  • 并发问题
  • 名称空间污染
  • 测试和调试
我认为,只要我们讨论标量类型,内存占用就是一个被视为过时的论点,至少对于PC而言,嵌入式可能是另一回事

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

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

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

此外,它们还增加了类的所有复杂性,使每一个反对意见都变得更糟,至少在总体上是如此

对于对象,您只需要有更多的位置来打破一切,只有一些位置会因副作用而阻碍调试。对象有变得稍微复杂一点的趋势,这增加了潜在的一致性初始化问题

对于对象,您突然不仅要管理访问,还要确保每个访问点都与对象的当前接口和基础数据类型的约束兼容。确保程序的某些部分正确管理所有权

我认为这不是一个观点的问题:如果你认为全局标量类型变量是坏的,你就必须考虑全局对象是不好的。< /P> 沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙利沙酒店 当然,对于全局标量类型变量以及全局对象,也有正当且完全合理的应用


如果几个全局变量在逻辑上是连接的,我认为将这些连接捆绑在一个全局对象中可能会解决一些问题。例如,当您在对象中移动一些全局标量类型变量时,名称空间污染当然会减少。如果在这些变量中有一个不变量,那么全局对象的类就是你要寻找的第一个地方,而一个类肯定是编码这个不变量的最佳地方。setter可能是解决缺少约束问题的工具。

对象实际上是变量,变量就是对象。在这两种情况下,您通常都不希望它们是全局的。如何在不将其存储在变量中的情况下获取全局对象?所有变量都是objectsTrue-区别在于对象通常比“松散”变量(即一个对象包含多个属性)更有组织,这就是我将它们分开的原因,但现在我知道这两种方式都没有多大区别。我的问题源于另一个困境。我处理的是嵌入式系统,在一个主文件中有很多函数共享文件范围的变量(我想这是可以的)。为了清晰起见,我想把所有这些函数放在单独的文件中,但是这些变量会变成真正的全局变量……请问“pod”变量是什么?嘿,Mark pod代表普通的旧数据:一个没有构造函数、析构函数和虚成员函数的类,int、char、wchar\u t、bool、float、double都是pod,还有class,POD的结构或并集,前提是所有非静态数据成员都是公共的,并且没有基类、构造函数、析构函数或虚拟方法。我用标量类型替换POD,POD不够精确,标量类型更容易理解。谢谢您的详细解释。考虑到globals带来的威胁,我主要关注的是在代码中制造混乱——这就是为什么我区分对象,将变量放在一起。但这在其他方面确实没有任何区别。我的问题来自另一个困境。我处理的是嵌入式系统,在一个主文件中有很多函数共享文件范围的变量(我想这是可以的)。我想做的是将所有这些函数放在单独的文件中,以清晰明了-但这些变量将成为真正的全局变量。。。