|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6553. Ответов 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 | |
|
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|