我正在阅读Bjarne Stroustrup的书," C ++编程语言"我找到了一个解释@Query(value="", native="true")
的例子。我所理解的是static_assert
仅适用于可由常量表达式表达的事物。换句话说,它不能包含一个意味着要在运行时进行评估的表达式。
本书中使用了以下示例(我在代码中进行了一些更改。但我认为不应该更改本书中给出的原始示例代码所产生的任何内容。)
static_assert
上面给出了编译错误。这是使用ideone编译的:http://ideone.com/C97oF5
书中的确切代码示例:
#include <iostream>
using namespace std;
void f (double speed)
{
constexpr double C = 299792.468;
const double local_max = 160.0/(60*60);
static_assert(local_max<C,"can't go that fast");
}
int main()
{
f(3.25);
cout << "Reached here!";
return 0;
}
答案 0 :(得分:0)
编译器在编译时不知道speed
的值。有意义的是它无法在编译时评估speed < C
。因此,处理行
static_assert(speed<C,"can't go that fast");
该语言不保证在编译时评估浮点表达式。有些编译器可能会支持它,但不能依赖它。
即使浮点变量的值对于人类读者来说是“常量”,它们也不一定在编译时进行评估。来自您提供的链接的编译器的错误消息说明了这一点。
static_assert expression is not an integral constant expression
你必须找到一种使用积分表达式进行比较的方法。然而,这似乎是一个有争议的问题。我怀疑,你真正想做的是确保speed
在一定限度内。这只是作为运行时检查才有意义。