c++ - 如何使用 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_2
为constexpr
,则不允许在if
语句中更改其值。如果我没有constexpr
在语句主体之前声明变量if
,那么它(如预期的那样)没有在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
应该只用于有条件地编译代码。您不需要它来进行常规控制流。
推荐阅读
- ionic-framework - 在 Ionic 上实施 Azure AD B2C
- angular - Express API 调用 Angular 6 没有数据
- python - Matplotlib 图只在循环中制作最终图
- c# - ASP.Net 中继器绑定但无法正确呈现
- vba - 根据当前记录的值与前一个相比更改标签的颜色
- cakephp - CircleCI & Cakephp - 无法连接到数据库进行 phpunit 测试
- python - 修改字典键并分配给新字典
- python - Python - h2o:如何正确指定列类型?
- string - 为什么我不能在 input("text") 中使用 str 变量?
- c# - 实体字符串未在 C# 中解码