如何解决现代C ++编译器会优化伪造的constexpr条件吗?
在我的所有代码中,我都有以下形式的调试条件:
decryptData(data,key) {
try {
const bytes = CryptoJS.AES.decrypt(data,key); //data is encrypted string from ASP
if (bytes.toString()) {
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
}
return data;
} catch (e) {
console.log(e);
}
}
if (Globals::DEBUG_MODE) std::cout << "debugging info" << std::endl;
是全局常量头文件中的DEBUG_MODE
。
我的问题是,当我准备发布软件并进行了一些最终的优化时,是否可以仅关闭DEBUG_MODE bool并让编译器删除所有这些条件,因为它们在编译时会评估为false?或者,如果我想要最优化的发布代码,是否需要注释掉或完全删除这些行?
我正在使用Visual Studio 2019社区并针对x64进行编译,但我想更广泛地了解答案,因为我计划在多个平台上进行编译。预先谢谢你。
解决方法
如果“丢弃”是指从最终输出二进制文件中删除,是的,大多数编译器将对if
进行优化(Dead code elimination),更好的是对if constexpr
进行优化。如果要确定,请使用编译器生成的asm进行验证。但是,如果您打算使用无法在发行模式下编译的代码,则不会。常规if
不会执行,if constexpr
仅在模板中会执行。为此,可以使用#ifdef DEBUG
之类的预处理器指令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。