![]() |
1
25
原因主要是简洁。首先,一个
这有效地介绍了
而且,没有人可能写
然后你的客户会这样做:
然后他会得到一个编译时链接器错误
在实践中,现在大多数编译器对此都比较宽容,并且会让您摆脱对
|
![]() |
2
9
在类定义中直接定义静态常量是C++的后来添加,许多仍然坚持使用旧的方法。
|
![]() |
3
5
在你的例子中,我也会用到一个常数。但是,在其他情况下 可以 正在添加其他相关常量。这样地:
在这种情况下,我会立即使用具有单个值的枚举,如下所示:
原因是,当我在switch表达式中使用常量值时,编译器可以发出警告,如:
如果我决定添加另一个与现有值相关的常量值(在本例中是另一种文件类型),几乎所有编译器都会发出警告,因为switch语句中不处理新值。 如果我使用了“int”和常量,编译器就没有机会发出警告。 |
![]() |
4
5
使用“enum hack”的唯一原因是,正如您在问题中所说,旧编译器不支持类常量定义。所以,除非您怀疑您的代码将被移植到一个旧的编译器,否则您应该在const到期的地方使用const。 |
![]() |
5
5
使用枚举有一个优点。枚举类型是一种类型,因此如果您定义,例如:
你的功能是:
编译器检查是否正在将枚举枚举枚举类型的成员传递给函数,因此只有参数值的有效值才会是EnumValue1和EnumValue2。如果使用常量并将函数更改为
编译器检查是否正在向函数传递int(任何int、常量、变量或文本)。 枚举类型适合对相关常量值进行分组。对于一个常量值,我看不到任何优势。 |
![]() |
6
3
我认为没有理由使用枚举,而且实际上最好使用
|
![]() |
7
2
这两者有区别。据我所知,Enums没有地址。不过静态常量可以。因此,如果有人获取const static int的地址,丢弃const,他可以修改该值(尽管编译器可能会忽略更改,因为他认为它是const)。这当然是纯粹的邪恶,你不应该这样做-但编译器不能阻止它。这不可能发生在Enums上。 当然,如果你(出于某种原因)需要那个警察的地址,你需要静态警察。 简而言之,枚举是右值,而常量static int是左值。参见 http://www.embedded.com/story/OEG20011129S0065 了解更多详细信息。 |
![]() |
8
1
嗯,便携性 是 使用枚举的一个好理由。这很好,因为您不必担心编译器是否支持“static const int s=10”… 另外,据我所知,静态变量必须在某个地方定义并声明,并且枚举值必须只声明。 |
![]() |
9
-2
底线-使用常量。 更多细节: 我不是C++专家,但这似乎是一个更一般的设计问题。 如果不是必须的,并且您认为枚举增长到一个以上的值的概率非常低/不存在,那么使用正则常量。 即使您是错误的,并且在将来的某个时候会有更多的值,使枚举成为正确的选择——一个简单的重构,然后您将常量更改为枚举。 |
![]() |
Codename K · VB6-如何使窗体排在第二位? 6 年前 |
![]() |
spice · 条件语句PHP 5.4出现意外“)”错误[重复] 6 年前 |
![]() |
snuff · c语法的问题-const*const*定义 6 年前 |
![]() |
DCR · 为什么要触发onclick事件 6 年前 |
![]() |
ClementNerma · 如何在C中生成“实”常量?[副本] 6 年前 |