C++ 在一行中将算术硬编码分数标记为 constexpr

问题描述 投票:0回答:1

我有一个简单的函数来检查一个值是否大于三分之一:

bool check(float x) {
   return x > 1.f/3;
}

根据我所读到的内容,编译器可能会在编译时计算 1.f/3 的结果以提高性能,但这不是必需的。要强迫他这样做,建议使用:

bool check(float x) {
   constexpr float one_third = 1.f/3;
   return x > one_third;
}

我的问题是是否有一种方法可以将其作为单行代码来执行此操作,而无需定义单独的表达式。比如:

bool check(float x) {
   return x > (constexpr float(1.f/3));
}

我找不到任何方法可以做到这一点,想请求确认。我找到了 if-constexpr,但这要求 if 的两边都是 constexpr,而不仅仅是它的内部子集。 Lambda-constexpr 或 consteval 可以用作 oneliners 吗?

c++ constexpr
1个回答
0
投票

是否有办法将其作为单行代码来做到这一点,

是的,您可以使用 lambda 并立即调用它:

bool check(float x) 
{
   return [x]()constexpr{return x>float(1.f/3);}(); 
}
© www.soinside.com 2019 - 2024. All rights reserved.