|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6391. Ответов 72
Вопрос к знатокам стандарта или просто ведующим.
В языке c за корректность аргументов обычно отвечает вызывающая сторона. Т.е. если ты вызываешь printf("%d", some_int) и подставляешь туда нечто не int, то это твои проблемы потом удивляться, недоумевать или возмущаться на некорректный вывод или уход в даун. А с++ какая практика?
1
|
|
| 22.07.2019, 19:23 | |
|
Ответы с готовыми решениями:
72
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? Странное расположение в памяти аргументов функции с неизвестным количество аргументов
|
|
Комп_Оратор)
|
|||
| 23.07.2019, 12:59 | |||
|
0
|
|||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||
| 23.07.2019, 13:10 | |||
|
Во-первых, реальная реализация содержит 100500 дебажных проверок. А вас послушать - она вообще в проверках не нуждается. А во-вторых, даже несмотря на обилие проверочного кода, функция все равно ненадежная. Она не обеспечивает 100% инвариант. И уязвима к переполнению буфера. Приведенный вами пример - пример хрупкого дизайна. Добавлено через 4 минуты Вряд ли hoggy станет изумляться человеческому невежеству.
1
|
|||
|
Комп_Оратор)
|
||
| 23.07.2019, 13:23 | ||
|
NDEBUG А переходы на личности там где нет нормальных слов и аргументов, - это и есть землепашеская (Хам - крестьянин) этика.
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||
| 23.07.2019, 13:39 | |||
|
Вас никто не обвиняет. Потому что не зачем. Потому что в конечном счете всем просто наплевать. Аргумент простой: вы не понимаете, зачем нужны ассерты. Ваше поведение, ваши тезисы сразу намекнут любому мало-мальски практикующему программисту, Что вы - просто очередной любитель порассуждать о том, в чем вы не разбираетесь. Так они называли чернь, которая позволяет себе непочтительное отношение в адрес высших сословий. В последствии, когда монархии канули в лету, и вместе с ними и кастовый строй, понятие "хамство" эволюционировало. Теперь так начали называть непочтительность исходящую от любого нижестоящего лица в адрес вышестоящего. Хамить может сын отцу. Или учитель учителю. Или подчиненный начальнику. Человек, который считает, что ему хамят - либо невежда, либо считает себя выше других. Никакой "землепашской этики" не существует.
0
|
|||
|
Комп_Оратор)
|
||
| 23.07.2019, 14:30 | ||
|
eva2326, можно назвать человека тупым или невеждой. А можно объяснить, что поскольку в С (процедурный стиль) проверка - дело вызывающей стороны (как правило - подчёркиваю), а С быстрее С++ - медицинский факт (как правило быстрее, - тоже для тех кто в танке), то объектная деориентация фрагмента кода (переход к процедурному стилю) может ускорить выполнение. Ценой будет отказ от преимуществ ООП в данном фрагменте. Инвариант не бесплатная штука. Это без конкретных примеров отсутствия проверок в функциях стандартной библиотеки и разжевывания. Это из совсем общих соображений. Точно так же вы можете объяснить мне, что по вашему, я понимаю неверно относительно assert в контексте вопроса темы и моих высказываний в ней. А можете перейти к личным оценкам. Посмотрите цитату Жванецкого. Он там не о vector::at(size_t). Он о хамстве. И если о нём, то считать дворян императорской России "погремушниками", ярчайшее к ним не уважение. Тот термин относился именно к дворянам (себе подобным) и служил началом приглашения на дуэль. Лишь ничтожество из дворян, стало бы обвинять холопа или его лошадь в хамском поведении. Я не касаюсь здесь армейской практики, конечно. Тут вы всё не верно толкуете, сударыня.
0
|
||
| 23.07.2019, 15:36 | |
|
IGPIGP, возможно, этот стих тоже ставит цитирующего в положение считающего себя выше других, но все же Мф. 7:6. Я прекрасно понимаю вашу мотивацию к интересной беседе, но когда она превращается в тупое хамство, то имхо наивно рассчитывать на адекватность и здравомыслие собеседников
В этой теме действительно все понятно, но несмотря на это имхо не стоит посягать на заблуждения оппонентов, они им дороги как память (С)
1
|
|
|
Комп_Оратор)
|
|||
| 23.07.2019, 15:48 | |||
|
Андрей, я же не оценивал ни кого. Просто аргументировал. В ответ, я получаю "невежда" и без аргументов. Это не интересно. К сожалению, это обыденность. _Ivana, скажите лучше вот что. Вот у оператора индексирования вектора нет проверки выхода за пределы. Он не блюдёт инвариант и возлагает это на вызывающую сторону. Метод at - тоже член, но вариант с внутренней проверкой. Интересно уже не это. Интересно то, что человек, который защищает парадигму "всё защищено изнутри", говорит: То есть, левая часть мозга не ведает о том, что говорит правая? Я думаю, она вообще не затрудняется. Важна только вера в свою правоту и отсюда зрение переворачивающее всё с ног на голову. Не знаю, что ещё добавить.
0
|
|||
| 23.07.2019, 15:51 | |
|
ЗЫ ну и что касается сабжевого вопроса, то мой первый вариант ответа модератору не понравился, поэтому вношу правку: Мф. 10:29 (в вольном переводе) - ни один аргумент не попадет в функцию без воли Того, кто контролирует передачу аргументов функции, у Него и аргументы и функции все сочтены,
Добавлено через 1 минуту IGPIGP, я разумеется не про ваше хамство (его и не было), а про хамство в ваш адрес, начатое хоггем и поддержанное некоторыми другими.
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 23.07.2019, 22:06 | |||
|
попробуй аргументировать. дабы не прослыть голословной балаболкой. Добавлено через 5 минут ты не понимаешь зачем нужны все эти ассерты. не знаешь, что такое "исключительная ситуация", и чем она отличается от иных классов ошибок. ты вообще не знаешь, какие бывают классы ошибок, и как с ними общепринято работать на плюсах. если бы знал, тогда понимал бы, почему метод at - нелогичен, и бесполезен. что примечательно, ни разу ещё не видел ни в одном проекте, что бы кто-то использовал at.
0
|
|||
|
Комп_Оратор)
|
|||||
| 23.07.2019, 22:28 | |||||
|
То что вы слабоваты в логике, - не проблема. Я видел синьоров и похуже. Я не буду перечислять чего вы не знаете. Хочу остановиться на том что утверждая что И я уже писал об этом. Но на вас это не действует. Ну же hoggy, напрягитесь. А что касается ваших манер, то я устал от них.
0
|
|||||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||
| 23.07.2019, 22:47 | |||
|
Однако, я смотрю на мир без розовых очков. Хороших людей всегда много. Но что с того? Завтра вы умрете, сколько из этих хороших людей вспомнит о вас через месяц? Вы вообще помните с чего начался этот диалог? Вас никто не обвинял, потому что это никому не нужно.
0
|
|||
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
||
| 23.07.2019, 22:51 | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 23.07.2019, 22:59 | ||
|
Вместо этого метод мог бы: 1) Вызывать функтор формирующий отчет об ошибке, состоящий минимум из трассировки стека. 2) При выходе за границы массива, возвращать значение по умолчанию. Нужна ссылка? Окей, пусть возвращает ссылку на static объект. Вот это уже выглядит несколько более приличным подходом.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 23.07.2019, 23:25 | |||||||
|
это ты с какого то перепугу решил, что оператор индексирования возлагает ответственность на вызывающую сторону. моё мнение дословно: если бы ты понимал для чего нужны ассерты. тогда перестань вести себя как напыщенный павлин. нет беды в том, что человек что-то не знает. плохо, когда человек ни бум-бум. но вместо того, что бы учиться, несет всякий бред. ещё и обижается, когда ему пишешь: чувак, ты не в теме. Добавлено через 12 минут зачем кому то знать, что у нас тут программная ошибка. замаскируем баг. пускай ещё полгода с собаками ищут.
0
|
|||||||
|
Комп_Оратор)
|
||||
| 23.07.2019, 23:46 | ||||
|
А у оператора индексирования вообще нет проверки. Как уже было озвучено at что у вектора, что у std::string - приблуда и используется редко. Я думаю, что так дело обстоит не только в аутсорсинговых дешёвых проектах. Но факт есть факт. Но выходит, что практика C++ - использовать оператор [] без проверки в рантайме или с проверкой на вызывающей стороне. Именно это я и хотел сказать. Причём, то что at - плохо сделан (я так не думаю, на самом деле), мне в этом споре на руку. Он проверяет именно на вызываемой стороне и им не хотят пользоваться. А пользуются оператором индекса. Это практика. Вообще, я не призывал отказываться от инварианта и проверок на вызываемой стороне. Если перечитать, то видно, что я говорил о том, что нет железного правила или пункта стандарта возлагающего ответственность на вызываемую сторону. И тот шум, который тут длится уже кучу постов, - нормальная практика из темы в тему. Что тут можно поделать?
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 23.07.2019, 23:51 | |||||||
0
|
|||||||
|
Комп_Оратор)
|
||
| 23.07.2019, 23:52 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||
| 24.07.2019, 12:14 | |||||||||||||||
|
то, что ты сейчас показал - это метод find
агрессивный брат близнец operator[] у них одинаковое предназначение: получить доступ к элементу по индексу. и одинаковый дизайн - индекс должен быть валидным. почему априори полагается, что индекс валидный? потому что есть только одна причина, почему он может оказаться невалидным - программная ошибка. а значит, нужно зажигать ассерт, и пускай исправляет. чего ты никогда и в принципе не должен делать, так это устраивать на каждой итерации бесполезные и тормозные сравнения:
что такие сравнения - это медленно. а в том, что это - бесполезно. эти сравнения тебе уже никак не помогут. потому что если индекс оказался невалидным, значит ты налажал с count. значит, где то выше по тексту ты уже просрал важный assert. значит, у тебя в коде баг, а твои алгоритмы уже работают неверно. значит, в лучшем случае такой подход лишь замаскирует проблему. программа будет жить, но работать неправильно. а ты даже не узнаешь об этом. откуда такая манера: вот в языке Х сделано через жопу. давайте на плюсах также будем? Добавлено через 4 минуты что когда человек отрицает очевидную реальность (тебе уже даже скриншоп показали в #52), и продолжает тупить, то это - шиза, или психоз. но я не психолог, и думаю, что это просто банальная тупость.
0
|
|||||||||||||||
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||
| 24.07.2019, 13:41 | ||
|
В случае libstdc++ из gcc или libc++ из llvm - всё печальнее. Ассертов нет и, судя по всему, не предвидится. А нужен ли этот Ассерт - вопрос, действительно спорный, и как сказал IGPIGP - холиварный.
1
|
||
| 24.07.2019, 13:41 | |
|
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат
Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
|
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1)
Сложность: Medium
Источник: LeetCode 380
Задача
Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
|
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли.
Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
|
|
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack
Сложность: Medium
Источник: LeetCode 155
Задача:
Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1).
Методы:
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|