我正在学习D,并且已经看过很多这样的代码:

ushort x = to!ushort(args[1]);

我认为这会将args[1]转换为ushort,但是它和cast(ushort)有什么区别?

编辑:感叹号运算符(operator)还有什么其他用途?

最佳答案

在D中

to!ushort(args[1])

模板实例化的简写
to!(ushort)(args[1])

并且类似于
to<ushort>(args[1])

以C++ / Java / C#之类的语言编写。

感叹号是要注意的事实,它不是常规参数,而是模板参数。

该表示法不使用尖括号,因为对于编译器而言,尖括号很难正确解析(它们使语法对上下文非常敏感),这使实现正确的编译器更加困难。有关更多信息,请参见here

我知道的唯一其他用途只是一元的“非”操作(例如false == !true)...目前我还没有想到其他用途。

关于 Actor :
cast(ushort)是未经检查的强制类型转换,因此,如果值超出范围,则不会引发异常。
to!ushort()是已检查的强制转换,因此如果值超出范围,它将引发异常。

关于operators - 惊叹号运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8623761/

10-13 02:30