Size: a a a

2020 August 02

ПК

Побитый Кирпич... in supapro.cxx
Ofee
Мне не становится проще, я начинаю думать, где может, где не может и какое исключение вылететь. Возрастает ментальная нагрузка, которая могла бы быть отражена в возвращаемых типах
Тут всё просто. Пока ты не знаешь что делать при ошибке, ты ничего не делаешь. Обычно так и есть, то есть try функции обычно располагаются где-нибудь сверху, где есть возможность обработки ошибок, и там как раз будет try catch. Остальное время ты тупо пишешь код и не думаешь. Отдельным кейсом тут выступают noexcept функции, но они явно помечены такими
источник

ПК

Побитый Кирпич... in supapro.cxx
Yaroslav Maximov
А как заставить функцию возвращать более одного значения? std::tuple использовать?
Да, или просто структуру создать
источник

YM

Yaroslav Maximov in supapro.cxx
Ну, судя по примеру в cppreference, std::tuple будет проще. А что лучше? Или тут скорее на усмотрение разработчика?
источник

ПК

Побитый Кирпич... in supapro.cxx
Yaroslav Maximov
Ну, судя по примеру в cppreference, std::tuple будет проще. А что лучше? Или тут скорее на усмотрение разработчика?
Пока нет именованных таплов, структуры лучше для пользователя твоей функции.
источник

ПК

Побитый Кирпич... in supapro.cxx
Потому что там у полей есть имена
источник

ПК

Побитый Кирпич... in supapro.cxx
Yaroslav Maximov
Ну, судя по примеру в cppreference, std::tuple будет проще. А что лучше? Или тут скорее на усмотрение разработчика?
таплы проще для автора функции, потому что кода меньше
источник

O

Ofee in supapro.cxx
Побитый Кирпич
Тут всё просто. Пока ты не знаешь что делать при ошибке, ты ничего не делаешь. Обычно так и есть, то есть try функции обычно располагаются где-нибудь сверху, где есть возможность обработки ошибок, и там как раз будет try catch. Остальное время ты тупо пишешь код и не думаешь. Отдельным кейсом тут выступают noexcept функции, но они явно помечены такими
Проблема в том, что где-то там, вверху, мы можем и просто забыть о том, что где-то внизу у нас что-то кидает исключения. Или можем просто об этом не знать, если недостаточно внимательно прочли документацию к стороннему коду.

До тех пор, пока проще написать void foo();, чем void foo() noexcept;, проблема точно никуда не денется. Я хочу чётко видеть контракт функции в её сигнатуре, а не гадать, кидает функция исключения или программист просто забыл указать, что не кидает
источник

ПК

Побитый Кирпич... in supapro.cxx
Ofee
Проблема в том, что где-то там, вверху, мы можем и просто забыть о том, что где-то внизу у нас что-то кидает исключения. Или можем просто об этом не знать, если недостаточно внимательно прочли документацию к стороннему коду.

До тех пор, пока проще написать void foo();, чем void foo() noexcept;, проблема точно никуда не денется. Я хочу чётко видеть контракт функции в её сигнатуре, а не гадать, кидает функция исключения или программист просто забыл указать, что не кидает
Обычно ты хочешь на верху обработать все исключения, потому ты просто пишешь catch на std::exception и не паришься.
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
Тут всё просто. Пока ты не знаешь что делать при ошибке, ты ничего не делаешь. Обычно так и есть, то есть try функции обычно располагаются где-нибудь сверху, где есть возможность обработки ошибок, и там как раз будет try catch. Остальное время ты тупо пишешь код и не думаешь. Отдельным кейсом тут выступают noexcept функции, но они явно помечены такими
Ну как сказать проще?
По-хорошему, нужно либо оборачивать каждый push_back в try/catch, либо делать try_push_back. Оба варианта, честно говоря, так себе. Но других вариантов пока нет.

В первом случае, если не оборачивать каждый раз в try, надо как-то жить дальше а случае ошибки, ничего не сломав. А это тоже надо суметь грамотно сделать, если код не совсем простой.

Во втором тоже гемор с проверками.
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Ну как сказать проще?
По-хорошему, нужно либо оборачивать каждый push_back в try/catch, либо делать try_push_back. Оба варианта, честно говоря, так себе. Но других вариантов пока нет.

В первом случае, если не оборачивать каждый раз в try, надо как-то жить дальше а случае ошибки, ничего не сломав. А это тоже надо суметь грамотно сделать, если код не совсем простой.

Во втором тоже гемор с проверками.
Вариант просто писать push_back чем не устраивает?
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Ну как сказать проще?
По-хорошему, нужно либо оборачивать каждый push_back в try/catch, либо делать try_push_back. Оба варианта, честно говоря, так себе. Но других вариантов пока нет.

В первом случае, если не оборачивать каждый раз в try, надо как-то жить дальше а случае ошибки, ничего не сломав. А это тоже надо суметь грамотно сделать, если код не совсем простой.

Во втором тоже гемор с проверками.
> суметь грамотно сделать

Да, писать с RAII код, как и должно быть в нормальном С++
источник

O

Ofee in supapro.cxx
Побитый Кирпич
Обычно ты хочешь на верху обработать все исключения, потому ты просто пишешь catch на std::exception и не паришься.
Обычно — не хочу. С примером веб-сервиса я согласился чуть ранее в другом чате, что это удобно. Но, тем не менее, я не всегда этого хочу

Иногда ошибка может быть критической или некритической в зависимости от последующих данных. А иногда мы даже хотим хранить или передавать в функцию. Обмазываться везде try/catch из-за этого, передавать исключения аргументом в функцию, если мы хотим передать информацию об ошибке?
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
> суметь грамотно сделать

Да, писать с RAII код, как и должно быть в нормальном С++
Это понятно (RAII). Но проблема же не только в этом может быть.

Просто пуш бэк устраивает. Может не устраивать, что будет в случае исключения, если я не добавлю / добавлю слишком высоко обработчик.
источник

ПК

Побитый Кирпич... in supapro.cxx
Ofee
Обычно — не хочу. С примером веб-сервиса я согласился чуть ранее в другом чате, что это удобно. Но, тем не менее, я не всегда этого хочу

Иногда ошибка может быть критической или некритической в зависимости от последующих данных. А иногда мы даже хотим хранить или передавать в функцию. Обмазываться везде try/catch из-за этого, передавать исключения аргументом в функцию, если мы хотим передать информацию об ошибке?
Если ты уже делишь на критические и не критические, то ты уже знаешь в текущем контексте как реагировать на них (иначе все исключения критические для данного контекста). Только тогда надо юзать try catch только для этого одного места, а не всё обмазывать
источник

AM

Alexey Medov in supapro.cxx
Ребят привет всем.

Раньше когда изучал С++ купил себе несколько книг. А сейчас так как ушел в другую сферу книги больше не нужны. Никому не нужны случаем эти книги бесплатно ?

В этой группе нельзя разместить фотографию книг, так что если кому то надо пишите в личку.
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Ещё весело, когда в одной функции есть вызовы и throws, и try_ функций.
источник

AM

Alexey Medov in supapro.cxx
7 книг
источник

VS

Vladimir Suisei in supapro.cxx
Alexey Medov
Ребят привет всем.

Раньше когда изучал С++ купил себе несколько книг. А сейчас так как ушел в другую сферу книги больше не нужны. Никому не нужны случаем эти книги бесплатно ?

В этой группе нельзя разместить фотографию книг, так что если кому то надо пишите в личку.
Ты бы сразу названия тогда вбрасывал
источник

AM

Alexey Medov in supapro.cxx
Че за группа где фотку нельзя приложить даже
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Это понятно (RAII). Но проблема же не только в этом может быть.

Просто пуш бэк устраивает. Может не устраивать, что будет в случае исключения, если я не добавлю / добавлю слишком высоко обработчик.
А что по твоему должно быть в таких случаях, чтобы тебя это устроило?
источник