如果我想在小型处理器嵌入式设计中断言来自C ++ 11 constexpr函数的检测到错误,关闭中断会消除建议的处理错误的方法(参见eric nieblers answer here)
这是一个简短的代码示例:
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';
}
据我所知:
有什么工作?
注意:在超级资源受限的嵌入式环境中使用C ++必须关闭异常,因为它们使用多余的RAM(例如我的芯片只有16K RAM)。这是常见的做法。
答案 0 :(得分:2)
我找到了特殊情况的解决方法,您可以保证在运行时永远不会调用constexpr函数。在这种情况下,您可以强制执行非常量评估错误。
int assert_failed() {
static int i = 5;
return i++;
}
constexpr int cheap_assert(bool i) {
return i == 1 ? 0 : assert_failed();
}
constexpr unsigned operator""_my_literal(const char* s, std::size_t size) {
return cheap_assert(size < 10), 0;
}