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

时间:2018-10-14 20:53:14

标签: types casting d

在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 个答案:

答案 0 :(得分:3)

to!T处理的转换范围比强制转换大得多。

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

通常,强制转换几乎只是重新解释具有不同类型的相同字节,但有一些例外:在整数和浮点类型之间进行强制转换(int→float产生等效值; float→int截断),在类类型之间强制转换(使用运行时类型信息来确保强制转换有效;否则产生null),从类强制转换为接口(这种类型为您提供了一个指针,该指针指向适当地转发函数的伪对象-很奇怪)。

to尝试进行更多的逻辑转换,最常见的是往返于字符串。