首页 > 解决方案 > 现代 C++ 编译器会优化掉错误的 constexpr 条件吗?

问题描述

在我的整个代码中,我都有以下形式的调试条件:

if (Globals::DEBUG_MODE) std::cout << "debugging info" << std::endl;

DEBUG_MODEconstexpr bool全局常量头文件中的一个。

我的问题是,当我准备发布我的软件并进行一些最终优化时,我是否可以关闭该 DEBUG_MODE 布尔值,并且编译器将删除所有这些条件,因为它们在编译时评估为 false?或者,如果我想要最优化的发布代码,我是否需要注释掉或完全删除这些行?

我正在使用 Visual Studio 2019 社区并针对 x64 进行编译,但我想更广泛地了解答案,因为我计划在多个平台上进行编译。先感谢您。

标签: c++debuggingcompiler-optimizationconstexpr

解决方案


如果通过丢弃,您的意思是从最终输出二进制文件中删除,是的,大多数编译器都会进行优化(死代码消除),if甚至更好,if constexpr. 如果您想确定,请使用您的编译器生成的 asm 进行验证。但是,如果您打算拥有不会在发布模式下编译的代码,那么不会。常规if不会做,if constexpr有时只会在模板中做。为此,您可以使用预处理器指令,例如#ifdef DEBUG.


推荐阅读