16

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

enum real E = 2.7182818284590452354L;

为什么不使用全局immutableenumover的优点/缺点是immutable什么?

4

2 回答 2

22
  1. 枚举只是一个右值,而不是一个左值。它没有地址。
  2. 枚举只能是编译时常量,而不是运行时常量。
  3. 枚举不会向目标文件添加任何膨胀。
  4. 枚举编译速度更快,并且在编译时使用更少的内存。通常它可以忽略不计,但如果你正在做足够复杂的元编程,它就会开始变得重要。

一般来说,对于编译时常量而不是运行时常量,使用枚举没有缺点,它的优点是使您的意图绝对清晰并且稍微更高效。

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

于 2010-09-02T00:18:04.147 回答
4

D 中的 IIRCenum A = B;或多或少与#define A BC 中的相同。在任何使用它的表达式中,它总是被替换为文字。

于 2010-09-02T00:47:35.003 回答