gpt4 book ai didi

c++ - 断言返回值,但以任何一种方式运行

转载 作者:可可西里 更新时间:2023-11-01 18:29:28 26 4
gpt4 key购买 nike

通常,当我从集合中删除一个元素时,我想断言它实际上已被删除:即

assert(s.erase(e));

但是当设置 NDEBUG 时元素不会被删除。但是如果我写

bool removed = s.erase(e);
assert(removed);

编译器提示在设置 NDEBUG 时未使用 'removed'。

我怎样才能正确地做到这一点?


我最终只是创建了一个实用方法:

inline void run_and_assert(bool b) {
assert(b);
}

现在我可以说

run_and_assert(s.erase(e));

这样做有什么缺点吗?这对我来说似乎比 luiscubal 的解决方案更简单

最佳答案

第一个例子是错误的,因为在定义 NDEBUG 时断言表达式将被删除,所以 s.erase(e) 根本不会被调用。

assert 的参数不应该有副作用。

第二种方法更好,虽然警告可能确实很烦人,但是 there are ways to silence the warning .

或者,您可以想出始终执行代码的自己的断言语句。

#ifdef NDEBUG
#define assert_always_execute(x) (x)
#else
#define assert_always_execute(x) assert(x)
#endif

关于c++ - 断言返回值,但以任何一种方式运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643803/

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