enum
可以用作常量,如下所示:
import std.stdio;
void main()
{
enum secondsPerDay = 60 * 60 * 24;
// enum int secondsPerDay = 60 * 60 * 24;
writeln(secondsPerDay * 1024);
enum fileName = "list.txt";
writeln(fileName, typeof(fileName).stringof);
auto fileName2 = "list.txt";
writeln(fileName2, typeof(fileName2).stringof);
}
然后,当字符串不可变时,使用enum over auto(string)的优点是什么?这些是返回的结果。
88473600
list.txtstring
list.txtstring
答案 0 :(得分:4)
与字符串没有太大区别。但一般来说,不可变和枚举之间的区别在于枚举总是在编译时进行评估。不可变值只是在静态上下文中计算的编译时间。
另一个区别是枚举有点像复制/粘贴到使用网站。观察:
enum array = [1,2,3];
void main() {
auto arr = array; // this actually allocates a new array [1,2,3]
static immutable arr2 = array; // this doesn't
}
真正的区别在于static
而不是immutable
,它将数据放在静态数据段中,但它仍然只与创建编译时值的enum
形成对比。
无论如何,使用普通字符串,这没有任何区别。当你在函数结果或可变数组上使用它时,enum
会更多地发挥作用,其中编译时间位可能意味着在运行时删除了函数调用,或者“粘贴常量”位可能意味着在运行时。
答案 1 :(得分:1)
它是immutable(char)[](又名字符串)和immutable(char [])(枚举字符串)之间的区别:
void main()
{
string s = "string1";
enum e = "enum1";
s = e; // allowed
e = s; // error
}
答案 2 :(得分:0)
从此处的文档:http://dlang.org/enum.html
清单常量
如果只有一个匿名枚举成员,则可以省略{}
enum i = 4; // i is 4 of type int
enum long l = 3; // l is 3 of type long
此类声明不是左值,表示不能使用其地址。它们只存在于编译器的内存中。
enum size = __traits(classInstanceSize, Foo); // evaluated at compile-time
使用清单常量是一种惯用的D方法,用于强制对表达式进行编译时评估。