to!string()和cast(string)有什么区别?

3
在D语言中,下面两者有什么不同:
import std.conv;
import std.stdio;

void main() {
    writeln(to!int(5.0));
}

并且

import std.stdio;

void main() {
    writeln(cast(int) 5.0);
}
1个回答

3

to!T比强制类型转换支持更广泛的转换。

例如,int i = 5; writeln(cast(string)i);是一个错误 -- 没有从int到string的有效强制类型转换。但是,int i = 5; writeln(i.to!string);可以工作并打印出5

通常,强制类型转换几乎只是在不同类型之间重新解释相同的字节,但也有一些例外情况:在整数和浮点数类型之间进行强制类型转换(int → float会得到相应的结果;float → int会截断),在类类型之间进行强制类型转换(使用运行时类型信息来确保转换有效;否则将产生null),从类向接口进行强制类型转换(这种转换给你一个指向虚假对象的指针,该对象适当地转发函数 -- 这很奇怪)。

to尝试进行更多逻辑转换,最常见的是字符串与其他类型之间的转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接