|
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
|
|
Кто отвечает за корректность аргументов функции?22.07.2019, 19:23. Показов 6443. Ответов 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 | |
|
Кто отвечает на форумах? Чат не отвечает, пока кто-либо не подключится
Вычислить значение функции и вывести на печать значения функции и аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|