Russian Qt Forum
Сентябрь 30, 2024, 20:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Достоинства static_cast  (Прочитано 17123 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #30 : Сентябрь 20, 2012, 06:41 »

значи я знаю, что у меня никогда не будет потерей точностей и говорю это компилятору, чтобы не сыпал варнинг... Хотя мне кажется тут на лицо, опасность, т.к. double'ы умножаются потом еще и складываются, когда-нибудь выстрел будет в ногу... поэтому если я не уверен, что (x * m.m00 + y * m.m10) и (x * m.m10 + y * m.m11) - поместится во float, я вообще не буду писать никаких приведениев ни в С++ стиле ни в Си, оставлю так, пусть компилятор говорит мне об потенциальной опасности в будущем...
Влазит одинаково во float и double, опасность переполнения та же самая. Просто float будет больше терять точность т.к. умеет хранить меньше цифр - ну это забота вызывающего, если он подавал на вход float значит считал ему точности хватит.

А в остальном я с Вами согласен, хотя мне больше нравится (float) или float(). Вариант "без всяких приведений" также считаю разумным, только придется запретить этот варнинг т.к. их будет очень много (это маленький кусочек показан).

Остальные от ответа благоразумно уклонились и предпочитают отпихиваться общими словами - ну это их право Улыбающийся
Записан
DmitryM
Гость
« Ответ #31 : Сентябрь 20, 2012, 10:22 »

Код
C++ (Qt)
QWidget * w;
..
QLineEdit * e = static_cast <QLineEdit *> (w);
 
А какой тут смысл? Иерархия классов меняется крайне редко.

Какой смысл писать так:
Код:
 *ioX = static_cast<float>(x * m.m00 + y * m.m10); //or in C-style (float)(x * m.m00 + y * m.m10) 
 *ioY = static_cast<float>(x * m.m10 + y * m.m11); //or in C-style (float)(x * m.m00 + y * m.m10)
Этот каст использует неявное преобразование типов, определенный самим языком.

На счет заметности в коде вопрос спорный. Если писать функцию длиною не более 75 строк, то все преобразования заметны.

Записан
DmitryM
Гость
« Ответ #32 : Сентябрь 20, 2012, 10:32 »

Ну, если они меняются, то константой они быть не могут (с точки зрения логики, а не возможностей языка).
Хотя ваш вариант сработает.
cv квалификаторы указывают на намерения, а не на "логику".
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.