匿名enum声明的目的是什么,例如:
enum { color = 1 };
Run Code Online (Sandbox Code Playgroud)
为什么不宣布int color = 1?
Mot*_*tti 58
枚举不占用任何空间并且是不可变的.
如果你使用const int color = 1;那么你将解决可变性问题,但如果有人拿了color(const int* p = &color;)的地址,那么就必须分配它的空间.这可能不是什么大问题,但除非你明确希望人们能够取得你的地址,否则color可能会阻止它.
同样,当在类中声明一个常量字段时,它必须是static const (对于现代C++而言不是这样)并且并非所有编译器都支持静态const成员的内联初始化.
免责声明:此答案不应被视为enum用于所有数字常量的建议.你应该做你(或你的牛人)认为更具可读性的事情.答案只列出了一些人可能更愿意使用的原因enum.
(1) int color = 1;
Run Code Online (Sandbox Code Playgroud)
color是可变的(意外地)。
(2) enum { color = 1 };
Run Code Online (Sandbox Code Playgroud)
color无法更改。
另一个选项enum是,
const int color = 1; // 'color' is unmutable
Run Code Online (Sandbox Code Playgroud)
两者enum都const int提供完全相同的概念;这是一个选择的问题。关于enum节省空间的流行观点,IMO 没有与之相关的内存限制,编译器足够聪明,可以const int在需要时进行优化。
[注意:如果有人尝试在;const_cast<>上使用 const int它将导致未定义的行为(这是不好的)。然而,同样的情况对于 来说是不可能的enum。所以我个人最喜欢的是enum]
| 归档时间: |
|
| 查看次数: |
30961 次 |
| 最近记录: |