Вот есть проект с выводом функций в C-стиле, т.е. без фишек С++. А значит exception-ов нет.
Вместо них — старые недобрые коды ошибок. Ну т.е. функция возвращает код ошибки, а если еще и результат нужен — то используются указатели в аргументах.
И вот что. Некоторые функции все-таки нарушают парадигму — возвращают bool (к примеру), а текст ошибки наоборот через указатель в аргументах.
И как то вижу в этом бардак. Либо везде четко должно быть — функция возвращает код+текст ошибки а все остальное только через указатели в аргументах. Либо же наоборот — возвращает результат а код ошибки в аргументах. Ну или пакетом.
Как вы предпочитаете, если проектируете самостоятельно?
Re: Возвращаемое значение функции как код ошибки - правила
Здравствуйте, Shmj, Вы писали:
S>Как вы предпочитаете, если проектируете самостоятельно?
В С++11 появился std::error_code. Я использую следую заветам Макконнелла, где ошибка — исключение, где не ошибка возврат true или false.
Sic luceat lux!
Re: Возвращаемое значение функции как код ошибки - правила
Здравствуйте, Shmj, Вы писали:
S>>>Как вы предпочитаете, если проектируете самостоятельно? NB>>https://en.cppreference.com/w/cpp/utility/expected
S>Т.е. у вас каждая функция возвращает expected? Прямо каждая каждая?
Как вы предпочитаете, если проектируете самостоятельно
Здравствуйте, Shmj, Вы писали:
S>А exception-ы? Они вообще быстро работают или по возможности лучше не использовать?
по обстоятельствам
в узких местах желательно без них. по обзорам, есть негативное влияние на оптимизацию.
в общем случае ничего плохого в исключениях не вижу.
Здравствуйте, Shmj, Вы писали:
S>проект с выводом функций в C-стиле, т.е. без фишек С++
Это религиозное, или по каким-то объективным соображеням?
S>Как вы предпочитаете, если проектируете самостоятельно?
Я с обычных кодов ошибок недавно перешел к возврату указателя на объект описания результата, где есть расширенный код (полный успех, частичный успех, устранимая неудача, фатальная неудача), место возникновения (файл/строка), текстовое описание или указание на способ его получения, указатель на предыдущий такой объект. При полном успехе можно возвращать нулевой указатель, но лучше предопределенный статический объект.
Re[5]: Возвращаемое значение функции как код ошибки - правил
Здравствуйте, Shmj, Вы писали:
S>А exception-ы? Они вообще быстро работают или по возможности лучше не использовать?
Если речь о возврате ошибки пользователю в UI, максимум раз в несколько секунд, то о быстродействии исключений можно вообще не думать. Если же они возникают сотни-тысячи раз в секунду, то могут уже ощутимо тормозить, раскрутка стека — дорогая операция.
Re[2]: Возвращаемое значение функции как код ошибки - правила
Здравствуйте, Евгений Музыченко, Вы писали:
S>>проект с выводом функций в C-стиле, т.е. без фишек С++ ЕМ>Это религиозное, или по каким-то объективным соображеням?
Чтобы вызывать либу из других ЯП. C умеют все языки мира, а вот ++ лишь небольшой процент из них.
Re[3]: Возвращаемое значение функции как код ошибки - правила
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, Shmj, Вы писали:
S>>Чтобы вызывать либу из других ЯП.
ЕМ>Про extern "C" никогда не слышали?
Именно так там и сделано — по этому наружу exceptions не выводятся. Как можно было иначе меня понять?
Re[5]: Возвращаемое значение функции как код ошибки - правила
Здравствуйте, Shmj, Вы писали:
S>Как можно было иначе меня понять?
Фразу "проект с выводом функций в C-стиле, т.е. без фишек С++" можно понять очень по-разному, поскольку выражение "вывод функций" не является сколько-нибудь распространенным термином, так что под "выводом" можно подразумевать все, что угодно, хоть немного подходящее по смыслу. Я его понял в том смысле, что функции строятся ("выводятся") из некоторого корпоративного шаблона, подразумевающего использование только возможностей C.