gpt4 book ai didi

c++ - 什么时候断言变得多余?

转载 作者:太空狗 更新时间:2023-10-29 21:22:03 26 4
gpt4 key购买 nike

我正在为一个小项目编写一些碰撞检测代码,我有这个用于矩形碰撞:

bool RectColl(const SDL_Rect *r1, const SDL_Rect *r2)
{
assert(r1 != nullptr);
assert(r2 != nullptr);
// cool stuff here
}

这用于像素级完美碰撞

bool PPColl(const SDL_Rect *r1, const SDL_Surface *s1, const SDL_Rect *r2, const SDL_Surface *s2)
{
assert(r1 != nullptr);
assert(r2 != nullptr);
assert(s1 != nullptr);
assert(s2 != nullptr);

// Make sure that it's got rectangular collision
if(!RectColl(r1, r2))
return false;
// more cool collision detection code here
}

如您所见,我在调用 PPColl 时对 r1 和 r2 进行了两次断言。这是多余的,还是我应该保留 r1 和 r2 的断言?

最佳答案

断言应该是多余的,因为它们应该检查您的代码确保始终为真的东西。他们的目的是捕捉那些你认为总是正确但实际上错误的东西。他们捕获的这类问题通常是 future 对代码进行更改的结果,而不是程序的当前状态。

在这种情况下,您的断言有不同的用途,应该全部保留。 PPColl 中的那些正在检查 从未使用空参数调用。 RectColl 中的参数与 PPColl 的参数无关;他们正在检查 RectColl 的参数。如果 RectColl 仅被 PPColl 调用,那么它们是同一件事,因此它们已经被检查过,但这是代码的属性现在;如果你删除了 RectColl 的断言,你可能无法捕捉到 future 的错误,在这种情况下,一些其他代码也使用可能为 null 的参数调用它,或者如果 PPColl 后来被更改能够接受空指针来表示某事,或任何其他可能的变化。

关于c++ - 什么时候断言变得多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com