Если я хочу подтвердить обнаруженную ошибку из функции constexpr C ++ 11 во встроенной конструкции небольшого процессора, отключение прерываний отменяет предлагаемый метод обработки ошибок (см. Ответ Эрика Ниблерса здесь)
Вот пример сокращенного кода:
constexpr bool isANumber(char c)
{
return (c >= '0' && c <= '9');
}
constexpr int charToInt(char c)
{
return (!isANumber(c))? throw std::logic_error("not a number"):
c - '0';
}
Насколько мне известно:
- static_assert не допускается, потому что входные данные могут быть значениями времени выполнения
- assert может заставить функцию оцениваться во время выполнения, а обработчик assert втягивает столько всего, что переполняет флеш-память большинства чипов Cortex
- бросить не получится, потому что я отключил исключения
Какая работа?
Примечание. При использовании C ++ во встроенных средах с ограниченными ресурсами необходимо отключать исключения, поскольку они используют избыточную оперативную память (например, мой чип имеет только 16 КБ ОЗУ). Это обычная практика.
assert
вconstexpr
функциях. - person 101010   schedule 03.02.2016constexpr
-условно безопасный, но без решения для не-constexpr
я не уверен, чего вы ожидаете. - person Yakk - Adam Nevraumont   schedule 03.02.2016