对'if constexpr'的理解有误

ge4*_*mue 2 c++ c++17 if-constexpr

我有以下代码

static constexpr bool condition = true;

int square(int num) {
    if constexpr (condition) {
      return num * num;
    } else {
      x
      return num;
    }
}

int main() {
    return square(3);
}
Run Code Online (Sandbox Code Playgroud)

用编译

-std = gnu ++ 17

我的假设

if constexpr (condition)
Run Code Online (Sandbox Code Playgroud)

是在编译过程中

    } else {
      x
      return num;
    }
Run Code Online (Sandbox Code Playgroud)

被丢弃,我没有得到关于未定义的错误

X

我的理解是错误的,这个“如果constexpr”是这样的

#ifdef CONDITION
  return num * num;
#else
  x
  return num;
#endif
Run Code Online (Sandbox Code Playgroud)

如何修改此代码以进行编译?

谢谢您的帮助

lub*_*bgr 6

如何修改此代码以进行编译?

要修复代码,只需使用删除行x

我的理解是否错误,因为这个“如果constexpr”类似于[...]

是的,您的理解是错误的。来自cppreference

在模板之外,对废弃的语句进行了全面检查。if constexpr不能替代#if预处理指令。

这意味着if constexpr块中的每个分支都必须是有效的C ++,即使它永远不会被使用。