有时我会写这样的代码
if (ptr)
ASSERT(ptr->member);
代替
ASSERT(!ptr || ptr->member);
因为 IMO 更直接。冗余比较会保留在发布版本中吗?
最佳答案
我会说这取决于您的编译器。
在 Release模式下,ASSERT
宏不会计算 ptr->member
并将解析为编译器将优化掉的普通表达式,但是 if
语句和关联的比较将保持原样。
但是,如果编译器足够聪明,可以确定条件没有任何副作用,它可能会优化整个 if
语句。编译成汇编(使用 /FA 选项)会给你一个明确的答案。
关于c++ - 发布版本中会删除 "if ... ASSERT"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053304/