在虚幻引擎4中,有three different assertion "classes"。在断言失败的情况下,所有工作都像断点一样。
报告错误并暂停执行。
check*()
:像C中的assert()
一样,可以由DO_CHECK 0
禁用verify*()
:类似于check*()
,但表达式仍在DO_CHECK 0
上执行(例如,用于变量分配)仅在调试版本中报告错误并暂停执行。
checkSlow()
,checkfSlow()
,verifySlow()
(请参阅(1))DO_GUARD_SLOW 1
时)报告错误(并且不会停止执行)。
ensure*()
:类似于check*()
,但程序执行can be continued after the break 在需要运行时代码验证但仍在处理错误情况时很有用
(3)非常适合作为调试(您必须手动设置断点)的快速替代方法,因为它会在失败时进入代码/调用堆栈,但允许应用程序随后继续运行。
但是,我没有看到(1)和(2)的有意义的应用程序,因为无论如何,由于致命故障(最终导致UE4编辑器崩溃),程序的执行都被暂停了。换句话说:除了使用check[Slow]()
/ verify[Slow]()
捕获致命错误之外,我还可以让它使未处理的致命错误崩溃,并从崩溃中检查调用堆栈以修复错误;而不是从手动声明中检查调用堆栈。
所以我的问题是:何时使用断言来暂停执行((1)和(2))?
check()
made here的推理似乎鼓励编写不安全的代码。
编译器可以在保证条件为真的前提下根据check()优化代码。