gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:44 25 4
gpt4 key购买 nike

在进行编程时,我使用断言和 NULL 指针验证。

但据我所知,assert 仅在DEBUG 模式下有用。

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

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

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

最佳答案

assert 表示“如果这不是真的,则我的代码中存在逻辑错误”。如果您要输入代码来处理指针可能为空的事实,那么 assert 调用就是多余的。您应该改为将日志记录和处理添加到“其他”案例中。这样,您的调试构建将以与发布构建相同的方式运行,即使在空指针情况下也是如此。

如果您的意思是断言并且您必须在空指针上中止,那么请在您的发布版本中启用断言或使用替代的支持发布的断言机制。

使用仅调试断言的唯一原因是检查逻辑错误,而在发布代码中检查成本太高。通常,对指针的空检查不属于此类。

关于c++ - 使用 Assert 和 NULL 指针验证哪个更好用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14273137/

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