Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > привдение типов в стиле С и в С++


Автор: Royan 7.10.2004, 18:56
Всех приветствую очередной проблемой заведшей меня в ступор.
Пусть имеем:
Код

int num_steps;
double pace;

num_steps = 2000;

pace = 1/num_steps;//Явная ошибка так как все преобразуется в целый тип и pace == 0
pace = static_cast<double>(1/num_steps); // Я в чем то ошибся? Почему тогда pace продолжает быть нулем?
pace = (double)1/num_steps;//собственно здесь все работает как надо и pace == 0.005


Добавлено @ 19:02
Я думаю ясно, что вопрос - почему static_cast работает так?

Автор: Fantasist 7.10.2004, 21:39
Боюсь, что это не static_cast. Дело в том, что выражение 1/num_steps будет интерпретированно как целочисленное деление, так как по умолчанию литерал "1" - это число целого типа. Так что значение этого выражения 0, и к чему ты его не приводи оно будет нулем.

Другое дело, выражение (double)1/num_steps - здесь явно указанно, что еденицу надо считать типом double, а раз чеслитель дробного типа, то и деление будет соответсвующее. Эквивалент со static_cast:

Код
static_cast<double>(1)/num_steps;

Автор: sergejzr 7.10.2004, 21:45
Конечно, сперва выражение эвалуируется, а потом уже каст smile.gif
А почему не сделать так:
Код

pace = 1./num_steps;

Автор: Royan 8.10.2004, 11:13
Fantasist
sergej.z

Спасибо за разъяснения и мысли, что называется просёк поляну.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)