首页 > 解决方案 > 如何使用 constexpr 逻辑?

问题描述

我想constexpr在一些代码中实现一些逻辑。我能够毫无问题地编译和执行此代码。

#include <iostream>

int main(){
    std::cout << "Starting c++ main" << std::endl;

    constexpr int val_1 = 100;
    int val_2;

    if constexpr (val_1 == 100){
        val_2 = 10;
    }
    else if constexpr (val_1 == 200){
        val_2 = 20;
    }

    std::cout << val_2 << std::endl;
}

但实际上,val_2应该constexpr也是。我怎样才能val_2成为一个constexpr?我尝试了几件事,但没有成功。如果我声明val_2constexpr,则不允许在if语句中更改其值。如果我没有constexpr在语句主体之前声明变量if,那么它(如预期的那样)没有在if语句之外定义。

标签: c++constexpr

解决方案


您可以将初始化程序放在三元表达式中:

constexpr int val_2 = val_1 == 100 ? 10 : val_1 == 200 ? 20 : 0;

如果您的初始化逻辑更复杂,您可以编写constexpr如下函数:

constexpr auto f(int val_1) 
{
  int val_2{};

  if (val_1 == 100){
    val_2 = 10;
  }

  else if (val_1 == 200){
    val_2 = 20;
  }

  return val_2;
}

接着:

constexpr int val_2 = f(val_1);

另外,请注意,它if constexpr应该只用于有条件地编译代码。您不需要它来进行常规控制流。


推荐阅读