gpt4 book ai didi

c++ - ASSERT 是多余的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:27 25 4
gpt4 key购买 nike

ASSERT(pointer);
pointer->x;

在这段代码中,ASSERT 似乎是多余的。如果指针为 NULL,pointer->x 无论如何都会失败。我的论点正确吗?

最佳答案

断言的重要(如果不是主要的话)目的是记录应该在代码中的特定点保持的不变量。如果不变量被破坏,assert 也可以中止程序这一事实只是锦上添花,尽管它非常有用。我想说的是,在一个典型的程序中,90% 的断言都是显然不会失败并且永远不会失败的断言。也就是说,assert在很大程度上是一种形式化的注释语言。从某种意义上说,这些“注释”是用相同的语言编写的,其余代码是用 (C/C++) 编写的,而不是简单的英语。

在您的代码示例中,断言告诉您此处的指针不应为空。这就是为什么它在那里。从这个意义上说,这个 assert 不是多余的。

就执行流程而言,assert 始终是多余的,这就是为什么通常不会在代码的发布版本中编译断言的原因。也没有什么可以阻止您在发布代码中保留断言,但通常是通过引入一种特殊的“发布断言”来完成的。在任何情况下,使代码的主要功能依赖于断言所采取的操作都不是一个好的编程习惯。就代码的主要功能而言,断言应该是多余的。

关于c++ - ASSERT 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955899/

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