Задать вопрос
Daniro_San
@Daniro_San
Программист

Функциональное приведение типов?

Я в курсе про приведение типов, в старом стиле и функциональном, static_cast и dynamic_cast, но спросить хочу не об этом.
Почему этот идентичный на первый взгляд код работает по разному?

// Старый / Си стиль
std::cout<< (double) 1 / 3 ; // Что то вроде 0.3333333

// Функциональный стиль
std::cout<< double (1 / 3) ; // Почему 0 ?


Что со вторым примером?
Вроде должен создавать временную переменную double, почти то же что и в первом случае, но почему выводится 0 ?
  • Вопрос задан
  • 265 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@res2001
Developer, ex-admin
В первом случае сначала приводится 1 к double явно, потом неявно 3 в double, т.к. первый аргумент операции дабл, а потом выполняется деление двух даблов.
Во втором случае выполняется целочисленное деление с результатом 0, затем 0 приводится к даблу.
Ответ написан
Комментировать
@iv_k
напишите (1.0/3.0)
а у вас инт делится на инт и получается 0
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tiendil
@Tiendil
Разработчик ПО.
Вот пары эквивалентных примеров
// Что то вроде 0.3333333
std::cout<< (double) 1 / 3 ; 
std::cout<< double(1) / 3 ;


std::cout<< double (1 / 3) ; 
std::cout<< (double) (1 / 3) ;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы