我知道 static_assert
在编译时进行断言,而 assert
在运行时进行断言,但实际上有什么区别?据我了解,在内心深处它们是代码片段,例如
if (condition == false) exit();
- 谁能给我一个例子,说明 only
static_assert
或 onlyassert
会在哪里工作?< - 他们能做一些简单的
if
语句做不到的事情吗? - 使用它们是不好的做法吗?
最佳答案
你问了三个问题,所以我会试着回答每个问题。
- 谁能给我一个例子,说明 only
static_assert
或 onlyassert
可以在哪里工作?<
static_assert
非常适合在编译时测试代码中的逻辑。 assert
非常适合在运行时检查一个你期望应该总是有一个结果的案例,但在意想不到的情况下可能会以某种方式产生意想不到的结果。例如,您应该只使用 assert
来确定传递给方法的指针是否为 null
,而这似乎永远不会发生。 static_assert
无法捕捉到这一点。
- 他们能做一些简单的
if
语句做不到的事情吗?
assert
可用于中断程序执行,因此您可以使用 if
,适当的错误消息,然后停止程序执行以获得类似的效果,但是assert
在这种情况下要简单一些。 static_assert
当然只对编译问题检测有效,而 if
必须在编程上有效并且不能在编译时评估相同的期望。 (但是,if
可用于在运行时发出错误消息。)
- 使用它们是不好的做法吗?
一点也不!
关于c++ - assert 和 static_assert 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210270/