UE_check,verify,ensure

在 Unreal Engine 中,checkverifyensure 是三个常用的宏,用于在代码中添加断言和错误检查。它们的行为和用途有所不同,以下是它们的详细对比:


1. check

行为:
  • 调试模式(Development Build)
    • 如果条件为 false,触发断言失败,程序中断并记录错误信息。
    • 适合用于开发阶段的调试。
  • 发布模式(Shipping Build)
    • 完全被编译器移除,不会产生任何运行时开销或检查。
适用场景:
  • 用于开发阶段的调试,确保某些条件在开发过程中始终为真。
  • 不适合发布版本,因为会被移除。
示例:
check(GameViewportWindow.IsValid()); // 仅在调试模式下检查

2. verify

行为:
  • 调试模式(Development Build)
    • 如果条件为 false,触发断言失败,程序中断并记录错误信息。
  • 发布模式(Shipping Build)
    • 如果条件为 false,程序仍然会中断。
    • check 不同,verify 在发布模式下不会被移除。
适用场景:
  • 用于关键检查,确保某些条件在发布版本中也必须为真。
  • 如果条件不满足,程序会立即中断,适合用于不可恢复的错误。
示例:
verify(GameViewportWindow.IsValid()); // 在调试和发布模式下都检查

3. ensure

行为:
  • 调试模式(Development Build)
    • 如果条件为 false,记录错误信息,但程序不会中断。
    • 返回 false,允许开发者处理错误。
  • 发布模式(Shipping Build)
    • 如果条件为 false,记录错误信息,但程序不会中断。
    • 返回 false,允许开发者处理错误。
适用场景:
  • 用于非关键检查,允许程序在条件不满足时继续运行。
  • 适合用于可以恢复的错误或警告场景。
示例:
if (!ensure(GameViewportWindow.IsValid())) // 记录错误但不中断
{
    // 处理错误情况
}

对比表格

特性checkverifyensure
调试模式行为条件为 false 时中断程序条件为 false 时中断程序条件为 false 时记录错误,不中断
发布模式行为被移除,无任何作用条件为 false 时中断程序条件为 false 时记录错误,不中断
返回值无返回值无返回值返回 bool(条件是否为 true
适用场景开发阶段的调试检查关键检查,发布模式也需生效非关键检查,允许程序继续运行

使用建议

  1. check

    • 用于开发阶段的调试,确保某些条件在开发过程中始终为真。
    • 例如:检查指针是否为空、数组索引是否越界等。
  2. verify

    • 用于关键检查,确保某些条件在发布版本中也必须为真。
    • 例如:检查关键资源是否加载成功、重要对象是否有效等。
  3. ensure

    • 用于非关键检查,允许程序在条件不满足时继续运行。
    • 例如:检查可选资源是否加载成功、处理用户输入是否有效等。

示例代码

void MyFunction()
{
    // 使用 check(仅调试模式)
    check(GameViewportWindow.IsValid()); // 如果无效,调试模式下中断

    // 使用 verify(调试和发布模式)
    verify(GameViewportWindow.IsValid()); // 如果无效,任何模式下都中断

    // 使用 ensure(记录错误但不中断)
    if (!ensure(GameViewportWindow.IsValid())) // 如果无效,记录错误但继续运行
    {
        UE_LOG(LogTemp, Error, TEXT("GameViewportWindow is invalid!"));
        // 处理错误情况
    }
}

总结

  • check:适合开发阶段的调试检查,发布模式下无作用。
  • verify:适合关键检查,发布模式下也生效。
  • ensure:适合非关键检查,记录错误但允许程序继续运行。

根据具体需求选择合适的宏,可以更好地管理代码的健壮性和性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值