Я переношу некоторый код, и первоначальный автор явно был озабочен сжатием как можно большего количества производительности из кода.Выполнение инициализации из другого типа
На протяжении (и есть сотня исходных файлы), есть много вещей, как это:
float f = (float)(6);
type_float tf = (type_float)(0); //type_float is a typedef of float xor double
Короче говоря, автор попытался сделать RHS заданий равного переменным быть назначен в , Я полагаю, что цель заключалась в принуждении компилятора к созданию, например, 6
в первом примере в 6.0f
, так что никакие накладные расходы на преобразование не происходят, когда это значение копируется в переменную.
Это было бы полезно для чего-то вроде второго примера, где правильная форма литерала (одна из {, 0.0
}) неизвестна/может быть изменена с линии далеко. Тем не менее, я вижу, что это проблематично, если литерал преобразуется и сохраняется во временное, а затем скопирован вместо преобразования, которое происходит при копировании.
Этот автор на что-то здесь? Действительно ли все эти литералы хранятся с предполагаемым типом? Или это просто огромная трата исходных битов файла? Каков наилучший способ обработки таких случаев в современном коде?
Примечание: Я считаю, что это относится как к C, так и к C++, поэтому я применил оба тега.
Нет причин, связанных с производительностью, чтобы поставить бросок с правой стороны. Довольно уверен, что это стилистический выбор. – Brian
Честно говоря, броски в обоих случаях безупречны. Конверсии будут происходить независимо (если возможно). Скорее всего, автор поставил тех, кто по мандату, подавить множество предупреждений. (т. е. потери точности и т. д.). – WhozCraig
Почему бы компилятор такого качества не сделал для себя такой простой вещи? – Leushenko