repstosw 18 1 сентября, 2020 Опубликовано 1 сентября, 2020 (изменено) · Жалоба 6 hours ago, haker_fox said: Теперь понятно. Это воплощает в жизнь известное высказывание: "если вы делаете преобразование типов, то ваша программа, скорее всего, написана неправльно". Какая-та хрень... Есть движок Box2D, принимающий и возвращающий во float. В том числе и координаты, которые используются для вывода изображения на экран в целочисленном представлении: float x,y; Calculate_Physics(&x,&y); Draw_Image((int)x, (int)y); И что здесь неправильного? Типкаст float в int явно выделил - для педантичности , на самом деле можно опустить его, компилятор сам приведёт float в int. Только не надо говорить что расчёт физики - не для МК и вообще не для embed. Жизнь не спрашивает, что можно/нужно тащить в эмбид, а что нет. Она требует. Изменено 1 сентября, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 32 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 16 минут назад, __inline__ сказал: Есть движок Box2D, принимающий и возвращающий во float. Вот мне только эта логика вообще не понятна, разработчики сего действа на что вообще рассчитывали, что есть экран с дробными пикселями?? Не видал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 18 minutes ago, __inline__ said: И что здесь неправильного? Вы почему меня спрашиваете? Я не автор этого высказывания. Я где-то его прочитал. По-моему у Страуструпа. И я полностью согласен, что при программировании без преобразования типов данных обойтись нельзя. Ну разве что в синтетическом примере в учебнике. 18 minutes ago, __inline__ said: Только не надо говорить что расчёт физики - не для МК и вообще не для embed. Ну я считаю (программирую) каждый день в МК физику, если измерения физических величин - это физика) Системы управления в своё время дела, тоже физика, ибо электропривода, траектория движения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 32 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 1 минуту назад, haker_fox сказал: И я полностью согласен, что при программировании без преобразования типов данных обойтись нельзя. Так вы ж сами себе противоречите, пред. посту Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 49 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 3 minutes ago, mantech said: Вот мне только эта логика вообще не понятна, разработчики сего действа на что вообще рассчитывали, что есть экран с дробными пикселями?? Не видал... не хотели копить ошибки округления. И это лишь расчёт физики, его ведь не обязательно на экран выводить в "целых" пикселях в масштабе 1:1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 1 сентября, 2020 Опубликовано 1 сентября, 2020 (изменено) · Жалоба 16 minutes ago, mantech said: Вот мне только эта логика вообще не понятна, разработчики сего действа на что вообще рассчитывали, что есть экран с дробными пикселями?? Не видал.. Всё просто. До какого-то момента я тоже думал, что разрабы Box2D дураки. На самом деле, дробный результат координат очень полезен , когда идёт приращение с дробным инкрементом. Допустим приращение 2,5 пиксела. Вначале это +2, затем уже +5, затем +7, затем 10. Приращение больше 2, но меньше 3. Можно конечно сделать целыми числами, но тогда надо будет умножать, затем делить, что не всегда удобно. 15 minutes ago, haker_fox said: Вы почему меня спрашиваете? Я не автор этого высказывания. Я где-то его прочитал. По-моему у Страуструпа. Моё бурное несогласие было направлено в адрес автора высказывания. Не к вам. Однако (мне показалось?) , что вы и DXP согласны с ним? Изменено 1 сентября, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 13 минут назад, haker_fox сказал: Вы почему меня спрашиваете? Я не автор этого высказывания. Я где-то его прочитал. По-моему у Страуструпа. И я полностью согласен, что при программировании без преобразования типов данных обойтись нельзя. Ну разве что в синтетическом примере в учебнике. Это примерно то же самое, как если в приличном обществе громко сказать ХУ*, а потом оправдываться, говоря: "Это не я так сказал, это на заборе было написано". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 1 hour ago, mantech said: Так вы ж сами себе противоречите, пред. посту В чём противоречие? Вы вообще внимательно читаете то, что я пишу, и кому пишу? Или выдираете сказанное без контекста? 1 hour ago, __inline__ said: Не к вам. Ок, понял) 1 hour ago, __inline__ said: Однако (мне показалось?) , что вы и DXP согласны с ним? Скажу только за себя. Вам показалось) Я же пишу реальные программы для реального железа. И как же обойтись без кастования? 1 hour ago, jcxz said: а потом оправдываться, говоря: "Это не я так сказал, это на заборе было написано". Вы, по ходу, тоже не поняли, к чему относится моё высказывание, к которому вы так любезно "докопались") Прочитайте ещё раз всё внимательно с поста @dxp 1 hour ago, jcxz said: а потом оправдываться, Я, по вашему, в чём-то виноват, раз вы считаете, что я оправдываюсь?))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 1 сентября, 2020 Опубликовано 1 сентября, 2020 (изменено) · Жалоба 10 hours ago, dxp said: Ну, и в С++ static_cast и reinterpret_cast - это разные уровни кастования - например, static_cast не позволит целое преобразовать к указателю, т.е. как бы разные уровни severity, а сишный вариант не различает их - объединяет оба. А вот это я уже называю "заботой об имбецилах"... Дыру в человеческом мозгу никак не выправить ликвидациями кажущихся дыр в языке. Считаю, что если программист допускает ошибочные или некорректные типкасты, то это его проблемы, а не языка. И в этом плане Си - крут, так как полная свобода действий. Иногда приходится делать сложные типкасты. В этом случае хочется сделать свободный типкаст в стиле Си. Без всяких этих static_cast'ов. И пользоваться malloc/free (realloc), вместо new/delete. Исключениями стоят выделения памяти под классы (тут только new/delete) Изменено 1 сентября, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 13 minutes ago, __inline__ said: В этом случае хочется сделать свободный типкаст в стиле Си. Без всяких этих static_cast'ов Никто в Си++ не запрещает делать каст в Си-стиле. Но вы можете использовать reinterpret_cast из набора Си++ операторов. Он (если ян е ошибаюсь), эквивалентен "свободному" (безбашенному) Си-кастованию) 13 minutes ago, __inline__ said: И в этом плане Си - крут, так как полная свобода действий. А разве Си++ накладывает ограничения на свободу. Пишу на нём для МК достаточно давно. Чтобы было понятно, на каком уровне пишу, скажу так: драйвера, сбор данных, фильтрация, связь и т.п. Не заметил никаких ограничений. Если хочется быть совсем отмороженным))), то можете использовать инлайн-ассемблер, машинные коды или intrinsic-функции. Впрочем, всё это уже к Си++ мало относится, так как есть и в обычном Си. Но не нужно забывать, что Си++ предоставляет и массу полезных инструментов, позволяющих сократить количество строчек кода, и при этом не раздувать (как иногда ошибочно думают) машинный код. 13 minutes ago, __inline__ said: И пользоваться malloc/free (realloc), вместо new/delete Используйте их в Си++. Они работают. Только что такого в записи type_t * ptr = malloc(sizeof(type_t) * TYPE_T_COUNT); вместо auto ptr = new type_t[TYPE_T_COUNT]; 13 minutes ago, __inline__ said: Исключениями стоят выделения памяти под классы (тут только new/delete) Нет, не только. Вы можете объекты классов создавать статически. Без динамического выделения памяти. З.Ы. Стал активно уходить от динамического распределения памяти. Давно не писал new/delete. Даже в справочник заглянул для того, чтобы в этом посте написать пример))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 1 сентября, 2020 Опубликовано 1 сентября, 2020 (изменено) · Жалоба 1 hour ago, haker_fox said: А разве Си++ накладывает ограничения на свободу. Накладывает: 1 hour ago, haker_fox said: Используйте их в Си++. Они работают. Только что такого в записи type_t * ptr = malloc(sizeof(type_t) * TYPE_T_COUNT); Вот тут Вы и попались! В С++ будет ошибка, в С пролезет. Надо так: type_t *ptr = (type_t*)malloc(sizeof(type_t)*TYPE_T_COUNT); 1 hour ago, haker_fox said: Нет, не только. Вы можете объекты классов создавать статически. Без динамического выделения памяти. Для классов с инитом конструкторов - тольлько new/delete. Без вариантов! Quote З.Ы. Стал активно уходить от динамического распределения памяти. Давно не писал new/delete. Даже в справочник заглянул для того, чтобы в этом посте написать пример))) В играх без динамического перераспределения памяти никак нельзя. "Выделил-использовал-освободил"... так много раз. P.S. Еще что заметил: в С++ тип bool "искаропки", а в обычном С - нет. Изменено 1 сентября, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 8 minutes ago, __inline__ said: Вот тут Вы и попались! Конечно попался: я new давно не писал, а malloc и того дольше) Да и идея была передать суть, а не 100%-компилируемый код))) 8 minutes ago, __inline__ said: В С++ будет ошибка, в С пролезет. Класс! Си++ вас же предупреждает о неаккуратности. Лишний раз задумаетесь) Я даже в IAR ключик добавляю, который все предупреждения превращает в ошибки. 8 minutes ago, __inline__ said: Для классов с инитом конструкторов - тольлько new/delete. Без вариантов! Не понял вас, приведите пример, пожалуйста. Я использую классы с конструкторами, но не использую выделение или удаление динамической памяти. В конструкторах происходит инициализация полей класса и конструктора базового класса. 8 minutes ago, __inline__ said: В играх без динамического перераспределения памяти никак нельзя. Да я не фанатик))) Прекрасно понимаю, что динамическая память это не зло, а необходимый инструмент. К месту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 3 часа назад, __inline__ сказал: Для классов с инитом конструкторов - тольлько new/delete. Без вариантов! Есть вариант: auto ptr = malloc(sizeof(T)); if(ptr == nullptr) { return errorcode; } auto t_ptr = new(ptr) T(параметры конструктора); ...... t_ptr->~T(); free(ptr); Подсказка: placemet new() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 27 минут назад, Сергей Борщ сказал: Подсказка: placemet new() Ну, то есть без new всё же не обошлось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 1 сентября, 2020 Опубликовано 1 сентября, 2020 · Жалоба 8 минут назад, AHTOXA сказал: Ну, то есть без new всё же не обошлось? Этот new не выделяет память. Фактически это вызов конструктора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться