Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 179 / 41
Регистрация: 13.07.2017
Сообщений: 4,563
Записей в блоге: 14

Правда ли, что неявное преобразование типов - это зло, но и универсальный оператор явного преобразования - тоже зло?

16.02.2022, 23:21. Показов 2427. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если кратко, то я думаю, что да. Вот пример: программист преобразует double в int. Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate. А это - неопределенное поведение. Надеюсь, вы понимаете ужасный смысл этих слов? Насколько я знаю, обычно используется Truncate, но это не всегда именно то, что хотел пользователь. А если число не умещается в int, вариантов еще больше: вернуть младшие биты, округлив их любым из вышеперечисленных способов, вернуть экстремальное для int значение, вернуть 0 и т. д. Поэтому я считаю, что в таком случае компилятор должен выдавать как минимум предупреждение, а лучше ошибку, и требовать явно указать способ приведения.
Другой пример: преобразование массива байт в строку. Может быть, программист хотел вернуть эти байты списком, может быть, попытаться извлечь из них текст в какой-либо кодировке, а может, закодировать в Base64...
Еще хуже преобразование object в какой-либо другой тип. Число возможных вариантов поведения транслятора невозможно себе представить. Считаю, что такое преобразование должно производиться исключительно оператором is.
Еще вариант - преобразование внешнего типа коллекции в более узкий или несвязанный (например, список в множество или стек в очередь). И хотя неопределенного поведения тут нет, но это действие может привести к огромным вычислительным расходам впустую. Оптимальный, с моей точки зрения, вариант - использовать функции в стиле LINQ или конструкторы. Microsoft в этом случае поступили неглупо. А вот расширяющие преобразования коллекций (например, очередь в список), я считаю, должны быть вообще неявными, так как они естественны и не приводят к потере данных.
Другие мнения приветствуются.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2022, 23:21
Ответы с готовыми решениями:

Не могу вызвать неявное преобразование типов в Main для проверки "Перегрузки операторов преобразования типов"
Добрый день, Написал явное преобразования типов из дроби в тип double (явное потому что если делаю неявным то оно конфликтует с...

Почему xpage это зло
Сёдня прочитал весьма интересную статью: Не учите фреймворки, учите архитектуру - http://habrahabr.ru/post/253297/ Полностью с ней...

Неявное преобразование типов?
есть класс Vector затем с его помощью создается класс Matrix (матрица - массив векторов) дошла очередь до операции умножения матрицы...

20
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
17.02.2022, 01:58
Ягоды вишни перебрать, удалить веточки и плодоножки, промыть и дать стечь в дуршлаге или сите.
Пока ягодки будут стекать, простерилизовать банки, а крышки для закатки прокипятить.
Насыпать в бутыль вишню.
В банку засыпать сахар и лимонную кислоту.
Залить ягоды кипящей водой, накрыть крышкой и закатать.
Тщательно взболтать воду в банке.
Убрать в банку темное теплое место для медленного охлаждения.Особенность компота из вишни в том, что сразу после закатки он практически бесцветный. Это не должно настораживать. Пройдет 2-3 дня, компот настоится и приобретет красивый темный цвет.
Прошло 2-3 дня и компот готов.
Приятного аппетита!
2
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,699
17.02.2022, 06:05
Да, это хорошо, когда специалист умеет думать абстрактно, то есть решать не одну конкретную задачу, а сразу много задач, которые могли бы возникнуть. Но часто абстрактные рассуждения никому не нужны, ведь нужно решать конкретную задачу, в которой универсальное решение не требуется. Рецепты - это наше все!
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 179 / 41
Регистрация: 13.07.2017
Сообщений: 4,563
Записей в блоге: 14
17.02.2022, 09:25  [ТС]
Никто не хочет ничего написать по делу?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.02.2022, 17:18
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Никто не хочет ничего написать по делу?
смотрим
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate.
дальше можно не читать - Вы точно не в теме того как вся эта кухня организуется и работает.
1
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
18.02.2022, 01:58
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
программист преобразует double в int. Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate.
И ни одна из этих функций отношения к такому преобразованию не имеет.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Надеюсь, вы понимаете ужасный смысл этих слов?
А вы сами понимаете, что говорите?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.02.2022, 09:13
Цитата Сообщение от Usaga Посмотреть сообщение
А вы сами понимаете, что говорите?
UB в нейронах?
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
18.02.2022, 09:27
Цитата Сообщение от Croessmah Посмотреть сообщение
UB в нейронах?
Ага. Вило, петухи и киски...
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.02.2022, 09:29
И вообще, такое бы
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate. А это - неопределенное поведение.
не относилось к неопределенному поведению.
Сам же определил возможные варианты.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
18.02.2022, 09:56
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Еще хуе преобразование object в какой-либо другой тип.
Стесняюсь спросить, но что такое хуе преобразование?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.02.2022, 10:05
Катафалк, разложение члена на многочлен?
0
Заблокирован
18.02.2022, 10:06
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вот пример: программист преобразует double в int. Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate. А это - неопределенное поведение.
У тебя в логике ошибка.

Во первых, если по твоему мнению неопределённое поведение даёт само преобразование, то какая разница явное оно или нет? Никакой, это свойство самого преобразования.

Во вторых, чем отличается "универсальный оператор преобразования" от того же floor либо чего-то подобного? Также ничем, кроме того, что позволяет писать полиморфный код. Очевидно, что нечто более гибкое даёт больший простор для действий, в том числе тех, смысла которых ты не понимаешь.
0
фрилансер
 Аватар для Алексей1153
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,983
18.02.2022, 11:48
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Правда ли, что неявное преобразование типов - это зло
нет, не правда
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 179 / 41
Регистрация: 13.07.2017
Сообщений: 4,563
Записей в блоге: 14
18.02.2022, 12:28  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Сам же определил возможные варианты.
Отсутствие неопределенного поведения - это единственный возможный вариант.
Цитата Сообщение от Катафалк Посмотреть сообщение
Стесняюсь спросить, но что такое хуе преобразование?
Буква "ж" не отпечаталась.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.02.2022, 12:37
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Отсутствие неопределенного поведения - это единственный возможный вариант.
Там это, как его... есть не только неопределенное поведение.

Добавлено через 3 минуты
Просто для справки:
undefined behaiour (неопределённое поведение)
unspecified behavior (неуточнённое поведение)
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 179 / 41
Регистрация: 13.07.2017
Сообщений: 4,563
Записей в блоге: 14
18.02.2022, 13:07  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Просто для справки:
Признаюсь, ошибся, имелось в виду неуточненное поведение. Но не думаю, что это сильно меняет смысл исходной посылки.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.02.2022, 13:21
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Но не думаю, что это сильно меняет смысл исходной посылки.
В данном случае, не меняет. Язык с таким подходом будет в мусорке.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
19.02.2022, 04:21
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
смысл исходной посылки
А в чём этот смысл-то? Я не понял. Выдана портянка какого-то бреда и всё.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
19.02.2022, 22:54
Неявное преобразование типов - это зло.

Явное преобразование типов - это нормально, когда оно является частью доменной логики.

Поведение транслятора строго определено в обоих случаях. То есть, нет никакого "неопределённого поведения".

Неявное преобразование - зло не само по себе, а потому что оно может маскировать ошибки программиста. Если бы программисты никогда не ошибались, то не было бы никаких проблем с неявным преобразованием типов.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.02.2022, 20:18
Возьмите раст и перестаньте беспокоиться о неявных преобразованиях.

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

Oracle 11 SQL
1
2
3
4
5
6
7
DECLARE
  l_result VARCHAR(100 CHAR);
  l_value NUMBER NOT NULL := 42;
BEGIN
  l_result := 'value: ' || l_value; -- неправильно
  l_result := 'value: ' || TO_CHAR(l_value); -- правильно
END;
Или питон:
Python
1
print('value: ' + 42)
Code
1
TypeError: can only concatenate str (not "int") to str
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2022, 20:18
Помогаю со студенческими работами здесь

Неявное преобразование типов
Здравствуйте, помогите, пожалуйста, разобраться с такой вещью. Есть задание - Определить класс «множество целых чисел» и операции...

Неявное преобразование типов
В данном коде неявное преобразование из int в string? string res = ""; foreach (int x in marks) { res...

Неявное преобразование типов
Здравствуйте, определен класс: template<typename T> class Polynomial { public: explicit...

Неявное преобразование типов в C#
Почему данная программа верна и нет ошибок, ведь тип long больше типа float. Как так можно 8 байт всунуть в 4 байта? static void...

Неявное преобразование типов
если я правильно понял, то explicit работает таким образом: class abc { int x; public: abc(int x_):x(x_){} ~abc(){} };


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru