为什么Phobos使用enum作为常量?

时间:2010-09-01 22:54:53

标签: enums d phobos

为什么Phobos使用enum来定义常量?例如,在std.math:

enum real E = 2.7182818284590452354L;

为什么不使用全球immutableenum优于immutable的优点/缺点是什么?

2 个答案:

答案 0 :(得分:22)

  1. 枚举只是左值,而不是左值。它没有地址。
  2. 枚举只能是编译时常量,而不是运行时常量。
  3. 枚举不会向目标文件添加任何膨胀。
  4. 枚举编译速度更快,编译时使用的内存更少。通常它可以忽略不计,但是如果你做了足够复杂的元编程,它就会变得很重要。
  5. 一般来说,对于编译时常量而不是运行时常量的东西,使用枚举没有任何缺点,它的优点是使你的意图绝对清晰,效率稍高。

    编辑:枚举的另一个用例可以是消除编译器是否应在运行时或编译时评估函数的歧义。如果将函数的结果分配给immutable堆栈变量,则将在运行时评估该函数。如果在同一范围内使用enum,则将在编译时评估结果。

答案 1 :(得分:4)

enum A = B;中的IIRC与#define A B在C中的内容大致相同。在任何使用它的表达式中,它总是以字面为单位。