C ++:编译时断言浮点数的值

时间:2017-10-30 23:04:54

标签: c++ c++11 static-assert

我正在使用C ++ 11。 我有一个浮点数。

float some_float = 3.0;

现在我想编译时间检查这个数字是否大于某个值。假设我想编译时间断言some_float大于1.0。我正在尝试这个:

static_assert(some_float > 1.0);

但是,它错误地抱怨,

error: static_assert expression is not an integral constant expression
static_assert(some_float > 1.0);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

问题:
我在做什么错了?
如何在编译时断言some_float设置为高于1.0的某些内容?

1 个答案:

答案 0 :(得分:2)

some_float必须为constexpr

constexpr float some_float = 3.0;

如果您将some_float简单地定义为float,则可以在assert()中使用,它可用于运行时;不在static_assert()中,即编译时检查。

此外:在C ++ 11中,需要一个字符串来显示错误消息

static_assert ( some_float > 1.0f , "!" );  
//..................................^^^ error message