|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6071. Ответов 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
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение
Это мой обзор планшета X220 с точки зрения школьника.
Недавно я решила попытаться уменьшить свой. . .
|
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|