如何使用 constexpr 逻辑?
How do I use constexpr logic?
我想在一段代码中实现一些 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_2
声明为 constexpr
,则不允许我在 if
语句中更改其值。如果我没有在 if
语句的主体之前声明 constexpr
变量,那么它(正如预期的那样)没有在 if
语句之外定义。
您可以将初始值设定项放在三元表达式中:
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
应该只用于有条件地编译代码。常规控制流不需要它。
您可以使用立即调用的 lambda:
constexpr int val_2 = []() {
if constexpr (val_1 == 100){
return 10;
}
else if constexpr (val_1 == 200){
return 20;
}
}();
我想在一段代码中实现一些 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_2
声明为 constexpr
,则不允许我在 if
语句中更改其值。如果我没有在 if
语句的主体之前声明 constexpr
变量,那么它(正如预期的那样)没有在 if
语句之外定义。
您可以将初始值设定项放在三元表达式中:
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
应该只用于有条件地编译代码。常规控制流不需要它。
您可以使用立即调用的 lambda:
constexpr int val_2 = []() {
if constexpr (val_1 == 100){
return 10;
}
else if constexpr (val_1 == 200){
return 20;
}
}();