![]() |
1
2
我可以看到使用枚举有两个好处。首先,一些调试器可以将常量转换回枚举变量名(这在某些情况下可以使调试更容易)。此外,还可以声明枚举类型的变量,该变量只能保存该枚举中的值。这可以为您提供一种额外的类型检查形式,而不仅仅是使用常量。 检查值是否重复可能取决于特定的编译器。最简单的方法可能是编写一个外部脚本,该脚本将解析枚举定义并报告值是否重复(如果愿意,可以将其作为构建过程的一部分运行)。 |
![]() |
2
1
我以前处理过这种情况,因为有错误代码。 我见过有人使用Enums作为错误代码,这带来了一些问题:
在设计我的错误代码解决方案时,我选择了另一条路:在源文件中定义的名称空间中的常量,地址点2和3。但是,为了获得类型安全性,常量不是
然后我可以定义几个错误文件:
不过,我没有解决任意的强制转换问题(构造函数是显式的,但是公共的),因为在我的案例中,需要转发其他服务器返回的错误代码,我当然不想知道所有这些错误代码(这太脆弱了)。 然而,我确实考虑过,通过将所需的构造函数设为私有并强制使用构建器,我们甚至可以得到4个。5。猛扑:
多做一点工作(对于框架),只检查同一分配检查的链接时间/运行时。尽管通过扫描模式很容易诊断重复数据
玩得高兴! |
![]() |
3
0
您问题的标题表明,您怀疑使用枚举的主要原因是您的常量是 非迭代 . 但是在C++中枚举类型已经是非迭代的。为了生成迭代的枚举类型,必须跳过相当多的循环。 我想说的是,如果常量是自然相关的,那么枚举是一个很好的主意,不管常量是否是迭代的。不过,枚举的主要缺点是完全缺少类型控制。在许多情况下,您可能更喜欢对常量值的类型有严格的控制(比如让它们无符号),这是枚举无法帮助您的(至少目前还没有)。 |
![]() |
4
0
要记住的一件事是你不能记下
|
![]() |
5
0
如果它们是纯粹的常量并且不需要运行时的东西(比如不能用非枚举值初始化枚举),那么它们应该只是无符号常量。当然,枚举的类型较少,但这不只是要点。 |
![]() |
notamaster · 匿名命名空间中的变量声明和其他位置的定义 2 年前 |
![]() |
Bipolo · 使用另一个命名空间的名称创建子命名空间 3 年前 |
![]() |
The Vivandiere · 从命名空间中引入单个名称 7 年前 |
![]() |
Bercovici Adrian · 静态类内定义的类的约束 7 年前 |
![]() |
shir k · 使用命名空间重载函数(&O) 7 年前 |
![]() |
yearntolearn · R包命名空间 7 年前 |
![]() |
ambikanair · 与特权pod共享装载命名空间 7 年前 |
![]() |
landau · 如何检查环境是否为包命名空间[重复] 7 年前 |