c++ - 发布版本中会删除 "if ... ASSERT"吗?

标签 c++ mfc assert

有时我会写这样的代码

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/

相关文章:

c++ - 使用 Windows API 获取用户的桌面文件夹?

c++ - 如何在boost python中访问 vector

c++ - 多线 Controller 降低高度

c++ - CArray 的析构函数大约需要 30 秒才能运行

c++ - MFC 中的抽象基类是否需要 DECLARE_DYNAMIC?

Javascript:具有明显相等值的断言导致不同

c++ - 使用C++和MFC进行动态图绘制

c++ - STL vector 交换结构 (C++)

java - java ' assert ' 和 ' if () {} else exit;' 之间的区别

eclipse - 在 Eclipse 中,当 Assert.assertEquals 失败时,如何查看它的输入?