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

What is the difference between to!string() and cast(string)

在D中,下列有什么区别:

import std.conv;
import std.stdio;

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

import std.stdio;

void main() {
    writeln(cast(int) 5.0);
}

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

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

一般来说,转换几乎只是用不同的类型重新解释相同的字节,除了一些例外:整数和浮点类型之间的转换(int → float 产生等价物;float → int 截断),在 class 类型(使用运行时类型信息来确保转换有效;否则会产生 null),从 class 转换为接口(这会给你一个指向适当转发函数的假对象的指针 - - 这很奇怪)。

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