gpt4 book ai didi

casting - D 中的枚举类型安全

转载 作者:行者123 更新时间:2023-12-02 21:44:05 25 4
gpt4 key购买 nike

D 中枚举类型安全的现状和计划是什么?

我预料

import std.stdio: writeln;

void main(string args[]) {
enum E {x, y, z}
E e;
writeln(e);
e = cast(E)3;
writeln(e);
}

由于 D 的其他强大静态类型/范围检查而无法编译,或者至少在运行时给出 RangeException。

令我惊讶的是,它反而打印了

cast(E)3

这真的是大多数用例的首选默认行为吗?如果是的话,有人编写了一些包装类型,最好在编译时提供更严格的范围检查吗?

最佳答案

cast 意味着你将事情掌握在自己手中,你可以用它做任何事情 - 就像棘轮怪胎所说的那样,对于组合标志很有用。 (不过,在这些情况下,我喜欢为每个项目提供准确的类型和显式值,以确保一切都符合我的要求,因此 enum : ubyte { x = 1, y = 2, z = 4},这种东西)

无论如何,有一种方法可以获取运行时异常,尽管在这种情况下:使用 std.conv.to:

import std.conv;
import std.stdio;

void main() {
enum E {x, y, z}
E e;
writeln(e);
e = to!E(2); // gives z, whereas to!E(3) throws an exception
writeln(e);
}

很酷的事实:to!E(string) 也有效。 to!E("x") == E.x,并且 to!string(E.x) == "x"。

关于casting - D 中的枚举类型安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com