|
1 / 1 / 0
Регистрация: 10.06.2013
Сообщений: 153
|
|
Интерпретация переменной типа int как float16.08.2021, 20:49. Показов 9822. Ответов 53
Метки нет (Все метки)
0
|
|
| 16.08.2021, 20:49 | |
|
Ответы с готовыми решениями:
53
ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||
| 16.08.2021, 21:53 | |||||||||||||||||||||||||
наверное, ты имел ввиду:
трюк с объединением прокатывает на всех топовых компиляторах, тем не менее, формально, такой код содержит UB. лично я не стал бы ставить на такой код свою карьеру. зачем? если можно просто написать корректный код Добавлено через 6 минут в новом с++ можно воспользоваться std::launder и это - единственный легальный способ реинтерпретировать "теплое" как "мягкое"
2
|
|||||||||||||||||||||||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 16.08.2021, 21:55 | |
|
0
|
|
|
Супер-модератор
|
||
| 16.08.2021, 21:58 | ||
Невольно возникает вопрос: почему язык не запрещает подобные конструкции? Или конкретнее - почему их пропускает компилятор?
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||
| 16.08.2021, 22:00 | ||||||||||||
0
|
||||||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 16.08.2021, 22:06 | ||
|
В очередной раз спрошу с нескрываемым удивлением: вот это вот "транслируются и успешно исполняются" - это такой троллинг? Или здесь все действиельно настольоко запущено?
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 16.08.2021, 22:06 | ||
|
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|
| 16.08.2021, 22:07 | |
|
0
|
|
|
Супер-модератор
|
|
| 16.08.2021, 22:12 | |
|
TheCalligrapher, нет это не троллинг. Это вопрос к системе типов. Что стоило просто запретить подобные преобразования - и не было бы проблем. Если Вы мне объясните это (и я пойму), то буду благодарен... Когда меня убеждают - я соглашаюсь.
А вот когда мне заявляют менторским тоном "Это так и никак иначе", а на вопрос "Почему?" отвечают "Потому", то я упираюсь. Мне кажется, это мое право.
2
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||
| 16.08.2021, 22:17 | ||||
std::launder не имеет. Требование std::launder<T> - по целевому адресу располагается именно объект типа T.Добавлено через 4 минуты https://stackoverflow.com/ques... asing-rule https://habr.com/ru/company/otus/blog/442554/
2
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 16.08.2021, 22:19 | |
|
0
|
|
|
4135 / 2713 / 433
Регистрация: 09.09.2017
Сообщений: 12,046
|
|||||||||||||||||
| 17.08.2021, 10:12 | |||||||||||||||||
Добавлено через 7 минут
3
|
|||||||||||||||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 17.08.2021, 10:17 | ||
|
Я вчера так и не смог придумать пример UB для union {uint32_t x; float y; }. Если у int сменить порядок байтов, то у float он тоже должен измениться, разве нет?З.Ы. Хорошо, что я в своё время выбрал себе основным языком программирования язык со строгой типизацией.
0
|
||
|
4135 / 2713 / 433
Регистрация: 09.09.2017
Сообщений: 12,046
|
||
| 17.08.2021, 10:27 | ||
|
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 17.08.2021, 11:53 | |||||
|
Добавлено через 19 минут Вся аргументация про высокоуровневый ассемблер и грамотный код справедлива только для первых двух понятий, но никак не для последнего. Кроме того, как было уже сказано, в языке С разрешен type punning через union, в языке С это не UB. Кроме того, разработчики компиляторов С++ прекрасно знают, что трюк с реинтерпретацией через union очень популярен и в коде на С++, поэтому не реализуют никаких помех для его выполнения. Но это не делает код корректным, так же как не делает правильным забег через дорогу на красный свет, не смотря на то, что миллионы человек могут похвастаться, что с ними во время этого ничего не случилось. Можно или нельзя в конкретном проекте плевать на несоответствие кода спецификации (в части корректности) - это вообще отдельный вопрос, который тут не обсуждался даже.
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 17.08.2021, 12:28 | |||
|
если ты даже не понял, зачем он был нужен?
0
|
|||
|
4135 / 2713 / 433
Регистрация: 09.09.2017
Сообщений: 12,046
|
|||||||||||
| 17.08.2021, 13:38 | |||||||||||
Ну а агрессивное навязывание своих фантазий, противоречащих реальному миру, и выглядит как бесполезные крики. Как полагались люди на безопасность переполнения знаковых чисел, так и будут. Как кастовали что угодно к чему угодно, так и будут. Как считали байт восьмибитным, так и будут считать. Не нравится - пусть идет в другие языки, где подобные вольности не дозволяются.
0
|
|||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 17.08.2021, 13:49 | |||||
|
Добавлено через 1 минуту Речь же не об этих случаях.
0
|
|||||
|
4135 / 2713 / 433
Регистрация: 09.09.2017
Сообщений: 12,046
|
|||||
| 17.08.2021, 14:49 | |||||
|
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 17.08.2021, 14:58 | |||||
|
0
|
|||||
| 17.08.2021, 14:58 | |
|
Почему диапазон значений у типа float больше, чем у типа int, если они оба занимают 4 байта? Как число типа 2.88007e+018 привести в обычный int, float или просто вывести
Переменной d присвоить первую цифру после запятой некоторой переменной x типа float Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|