我正在学习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/