我在发布版本下找不到关于 Q_ASSERT 语义的明确声明。如果没有断言检查,那么断言表达式是否被评估?
考虑以下代码
Q_ASSERT(do_something_report_false_if_failed());
会do_something_report_false_if_failed()
在所有潜在的 Qt 构建配置下运行吗?这样做会更安全(即使更冗长且可读性更低):
bool is_ok = do_something_report_false_if_failed();
Q_ASSERT(is_ok)
后一种方法的缺点是 ASSERT 失败不那么冗长,但也许它更清楚地表明该语句已执行?