В чем разница между! String () и приведением (string) - PullRequest
0 голосов
/ 14 октября 2018

В 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 голосов
/ 15 октября 2018

to!T обрабатывает гораздо более широкий диапазон преобразований, чем приведение.

Например, int i = 5; writeln(cast(string)i); является ошибкой - нет действительного преобразования типа int в строку.Но int i = 5; writeln(i.to!string); работает и печатает 5.

Как правило, приведение типов - это просто переосмысление одних и тех же байтов с другим типом, с некоторыми исключениями: приведение между целочисленным типом и типом с плавающей запятой (int → float производитэквивалент; float → int truncates), приведение между типами классов (использует информацию о типе среды выполнения, чтобы убедиться, что приведение является действительным; в противном случае возвращает null), приведение из класса к интерфейсу (который дает вам указатель на поддельный объект, которыйнаправляет функции соответствующим образом - это странно).

to пытается сделать намного больше логических преобразований, чаще всего в и из строк.

...