|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6979. Ответов 72
Вопрос к знатокам стандарта или просто ведующим.
В языке c за корректность аргументов обычно отвечает вызывающая сторона. Т.е. если ты вызываешь printf("%d", some_int) и подставляешь туда нечто не int, то это твои проблемы потом удивляться, недоумевать или возмущаться на некорректный вывод или уход в даун. А с++ какая практика?
1
|
|
| 22.07.2019, 19:23 | |
|
Ответы с готовыми решениями:
72
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? Странное расположение в памяти аргументов функции с неизвестным количество аргументов
|
|
Комп_Оратор)
|
|||||
| 24.07.2019, 14:16 | |||||
|
Добавлено через 2 минуты
0
|
|||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 24.07.2019, 14:21 | |||||||
|
Решения на основе find - долго. Логарифмическая сложность, а символов определенных стандартом юникода уже миллион. Решение по табличке - а что делать, если мы вылетели за табличку, ругать пользователя "нельзя нестандартные символы вводить"? Так они у него из файла сыпятся, откуда ему знать стандартные они или нет. В результате результат возвращается оператором индексирования, потому что быстро. Но вокруг него делается костылик
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 24.07.2019, 15:34 | ||
|
ты открой букварь уже, и почитай зачем нужны ассерты, тогда может вразумеешь, почему они не нужны в релизе.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 24.07.2019, 15:52 | ||||
|
приведи нормальный пример. и когда я пишу: "нормальный пример", то имею ввиду описание задачи, и решение в виде компилябельного кода. сейчас не очевидно: 1. с фига ли find будет дольше? заметь: find(key)сделаю ещё понятнее: find(index)а не: find(value)мы же обсуждаем валидность ключа (индекса, если речь идет о массивах) какие проблемы? 2. если юзверю доступен индексированный доступ, стало быть есть оператор size(). им пользоваться религия не позволяет? я не улавливаю проблемы. вот эту строчка: или к чему ты её вообще сейчас привел? Добавлено через 6 минут только не пользователя, а программиста. если есть табличка, значит есть и диапазон допустимых для этой таблички значений. и если индекс вылез за пределы этого диапазона, значит баг.
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 24.07.2019, 16:26 | ||||||||
|
std::map::find - бинарный поиск в коллекции пар ключ:значение. std::set::find - бинарный поиск в коллекции ключей. std::find - линейный поиск в коллекции ключей. Отсюда, когда мне предлагают сделать find, я думаю что речь идет о "запили коллекцию пар ключ:значение и ищи в ней". Есть класс представляющий самой таблицу "код символа: битовая маска со свойствами символа". Размеры таблицы меняются с каждым новым релизом стандарта. Сегодня символа в стандарте нет, завтра есть. Вы предлагаете пользователю парить себе мозг подобными техническими деталями? Нет символа - пусть табличка вернет нулевую маску и все. Для проверки "это цифра или не цифра?" этого вполне достаточно.
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||
| 25.07.2019, 12:40 | ||||||||||||||||
|
название метода определяет смысл его реализации. find используется в случаях, когда нужно определить: есть ли в нашем автобусе заявленный пассажир. как именно работает find - не сильно принципиально. что в контексте обсуждения речь идет об индексированных контейнерах, а не об ассоциативных массивах? я задал тебе вопрос:
потому что в представленном выше фрагменте кода требуется (должен использоваться) именно find. потому что выполняется поиск пассажира в автобусе. и допускается мысль, что он уже сошел на предыдущей остановке. или может зайти только на следующей. а программисту-пользователю. программист, в отличие от пользователя-не-программиста, не имеет права быть идиотом. а значит должен понимать, что делает. а значит должен знать свою предметную область. а значит должен знать её ограничения. а ты что же, предлагаешь пользоваться таблицей, игнорируя её ограничения? o_O ты что, пишешь код по принципу: а вдруг повезет? для метода isDigit, который определяет: цифра это или нет. ведь если код символа за пределами диапазона таблицы, тогда это однозначно не цифра, потому что все цифры указаны в таблице, а значит их коды находятся в её пределах. но такой подход не логичен и не разумен operator[], который возвращает значение реального элемента из реальной таблицы.
0
|
||||||||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 25.07.2019, 14:37 | |||
|
Плюс, не забываем о принципе KISS. 1) Хочешь узнать является ли символ цифрой? unicodeTable[code]&digitMask. 2) Хочешь узнать принадлежит символ произвольному набору символов? unicodeTable[code]&customCharsetMask. 3) Хочешь узнать валиден ли символ? unicodeTable[code]. Все делается через один стандартный интерфейс. А если как предлагаете вы, придется три разных метода пилить. Без каких либо намеков на универсальное решение.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||||||
| 25.07.2019, 18:22 | ||||||||||||||||||||||
std::vector::at() ?а началась эта речь с моего заявления, что at - бесполезный метод.речь же не о них. либо изначально, по смыслу задачи, устраивает вариант: "если у нас нет данных по конкретному символу, то будем врать, отвечая 'нет' на все вопросы". либо программист исправлял баги, внося правки в содержимое таблицы. либо проблем не было просто потому, что никто не запрашивал экзотику. потому что вот здесь баг: результат всегда будет отрицательный, что не всегда является правдой. а значит, иногда является багом. потому что азиатский символ не перестанет быть азиатским только потому, что в конкретной таблице о нем нет данных. вот это - баг:
если так нравится анализировать флаги - почему бы и нет? вот только нет никакого смысла даже пытаться что-то там анализировать, если заранее известно, что такого символа нет в данной таблице. и раз уже оно всегда известно заранее, то получается, что твой unicodeTable[code] совершенно напрасно проверяет индекс в релизе при каждом обращении. грамотный программист напишет так:
assert
0
|
||||||||||||||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 25.07.2019, 18:55 | ||||
|
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||
| 26.07.2019, 12:04 | ||||||||||
|
назвывается: "маскировка бага" потому что если нет, значит твоя таблица - твоя. и не имеет никакого отношения к их таблице. что азиатский символ азиатским быть не перестает независимо ни от каких таблиц? и что есть принципиальная разница между: "у нас нет данных" и "символ действительно не азиатский" ? если таблица поддерживает 11.0.0, значит с 11.0.0 проблем не будет. если таблица поддерживает 12.0.0, значит с 12.0.0 проблем не будет. если таблица поддерживает XX.0.0, значит... ну ты понэл. вопрос лишь в том, а знаешь ли ты (программист-пользователь), каковы ограничения твоей таблицы? что вот к тебе пошли символа, которых нет в твоей таблице. раз такая пляска, значит нужно модернизировать таблицу. ты вообще в курсе происходящего то?
в твоем варианте, класс таблицы в тихую подсунет дефолтный символ, и внешний код даже знать не будет, что у него проблема. азиаты афигеют, но дружно пойдут в жопу. потому что таблица сказала - они не азиаты. таблица лучше знает, кто есть кто. даже если в ней не хватает нужных данных. по степени долбанутости, такая твоя логика напоминает мне политику российского государства.
0
|
||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 26.07.2019, 14:31 | ||||||||
|
Тут будет другая проблема:
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 26.07.2019, 14:49 | |||||||||
|
потому что результат у нормальных людей: "сорри, но ваш символ не поддерживается нашей системой". нормальные люди просто допилят локаль. у ненормальных тут тем более нет никаких проблем. по логике ненормальных: вот когда будет: бедные японцы такие тупые, что даже символ своего алфавита ввести без ошибки не умеют.
говнокод, который маскирует баги, а вину за них сваливает на японцев. дальше как бе уже не так интересно продолжать этот диалог.
0
|
|||||||||
| 26.07.2019, 14:49 | |
|
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|