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
尝试进行更多的逻辑转换,最常见的是字符串之间的转换。
在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
尝试进行更多的逻辑转换,最常见的是字符串之间的转换。