Soh*_* Si 0 c++ constexpr c++17
constexpr有没有办法在编译器指令之前定义它#if作为其输入?换句话说,可以#if有来自 的输入constexpr吗?如果不是,是否意味着#if指令在 之前被评估constexpr?
constexpr int enable_debug = true;
#if (enable_debug)
std::string debug_logs;
#endif
for(int i=0;i<10;i++) {
f(i);
#if (enable_debug)
debug_logs += std::to_string(i);
#endif
}
#if (enable_debug)
std::court << debug_logs;
#endif
Run Code Online (Sandbox Code Playgroud)
这个问题有两个目的:
“指令时间”或“编译指示时间”是否早于编译时间?
我只想有条件地构建一些代码,但代码定义了一个变量,所以我不能使用if constexpr().
不,没有办法做到这一点。预处理器命令应用于比变量定义的评估(甚至完整解析)更早的翻译阶段。#if可以进行正常的整数算术和比较,并且可以扩展使用 创建的预处理器宏#define,但它不能检查非预处理器代码。
您要么需要创建enable_debug一个预处理器宏,要么从预处理器条件更改为ifor if constexpr(当然,这有其自身的局限性)。