|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6338. Ответов 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 | |
|
Помогаю со студенческими работами здесь
73
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|