我有一个lambda忽略了它的int
参数,总是返回一个常量。如果我把它标记为consteval
,编译就会失败,因为。编译器会抱怨用一个非常数的参数调用consteval
lambda。但是这个参数和lambda有什么关系呢?
从CompilerExplorer开始:
来源:3:16:错误:'i'的值无法在常数运算式中使用5| λ(i);
void bar (auto lambda, int start, int end) {
for (int i=start; i<end; ++i) {
lambda(i);
}
}
int main( )
{
auto foo = [] (int) consteval { return 2;};
bar(foo, 1, 9);
return 0;
}
3条答案
按热度按时间8yoxcaq71#
解决这个问题的一种方法(也是最简单的)是将lambda的参数类型改为
int&
,这样就不需要读取值,如下所示:Working demo
下面是另一个具有类似行为的人为示例:
Contrived example demo
41ik7eoe2#
您还可以添加一个显式检查。这不是最好的解决方案,但确实是:
ctrmrzij3#
另一种方法是将
bar
设为立即数函数。尽管如此,返回void
的立即数函数的可用性相当有限。