加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用Assert和NULL指针验证哪个更好用

发布时间:2020-12-16 05:00:13 所属栏目:百科 来源:网络整理
导读:在进行编程时,我使用的是assert以及NULL指针验证. 但正如我所知,断言仅在DEBUG模式下有用. 我的问题是假设我有一个内部指针,我肯定不能是NULL示例函数返回一个指针(但指针不是类的成员)在这种情况下,我可以使用断言 test* ptr = fun(); // return a pointer
在进行编程时,我使用的是assert以及NULL指针验证.

但正如我所知,断言仅在DEBUG模式下有用.

我的问题是假设我有一个内部指针,我肯定不能是NULL示例函数返回一个指针(但指针不是类的成员)在这种情况下,我可以使用断言

test* ptr = fun(); // return a pointer of type test
assert(ptr);

//do some operation

或NULL指针验证

test* ptr = fun(); // return a pointer of type test
assert(ptr);
if (NULL != ptr)
{
    //do some operation
}

这里的代码实践很好.据我所知,它将是第二个.
因为我遇到了一些ptr的值由于某些我们甚至无法想到的异常情况而返回NULL的情况.

但我们还有其他更好的选择吗?

解决方法

真正的解决方案取决于功能乐趣的语义.

如果返回NULL在语义上是无效的,那么我认为有趣应该抛出一个适当的异常(例如std :: logic_error1)而不是返回NULL,并且你可以在调用站点上使用assert来确保乐趣正常工作,如果是工作不正常,然后中止程序.通过这种方式,有趣的bug不会传播到程序的其余部分,因为它会被立即捕获.

但是,如果从fun返回NULL在语义上是有效的,那么你应该使用if检查调用站点上的返回值,在这种情况下确实不需要assert,因为无论如何你都会使用if.

1.或者您可以使用std :: runtime_error或std :: domain_error.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读