【发布时间】:2020-07-27 21:26:51
【问题描述】:
我正在尝试使用 for 循环,该循环使函数调用需要常量表达式:
for(int x = 0; x < 10; x++){
func(variable_that_is_constexpr)
}
如何将x 变成常量表达式?
以下不起作用,因为它报告了错误:
constexpr int toConstExpr(int x){
return x;
}
constexpr y = toConstExpr(z);
'z' 的值不能用于常量表达式
编辑:
我正在尝试执行上述操作,以便可以循环遍历函数的常量表达式,如下所示
constexpr int pins[2] = {1, 2};
for(int x = 0; x < 2; x++){
func(pins[x]);
}
'x' 的值在常量表达式中不可用
编辑二:
给出我正在尝试做的确切示例。我在数组中有引脚号。我想使用这些引脚号声明 LEDStrips。声明 LED 灯条的函数要求引脚为常量表达式。我想做以下事情:
constexpr int pins[] = {1, 2};
for (int x = 0; x < 2; x++}{
FastLED.addLeds<WS2811, pins[x], GRB>(leds[x], 5).setCorrection( TypicalLEDStrip );
}
'x' 的值在常量表达式中不可用
编辑三个
有没有一种不需要多次重复同一行来执行此操作的漂亮方法,其中我要更改的数字必须是一个常数?
FastLED.addLeds<WS2811, 3, GRB>(leds[0], 5).setCorrection( TypicalLEDStrip );
FastLED.addLeds<WS2811, 4, GRB>(leds[1], 5).setCorrection( TypicalLEDStrip );
FastLED.addLeds<WS2811, 5, GRB>(leds[2], 5).setCorrection( TypicalLEDStrip );
【问题讨论】:
-
您的问题不清楚。例如。您想以仅明确用于常量表达式的方式从循环中使用计数器变量的事实。我的印象是“我想用一只不会飞的鸟,例如企鹅,作为飞行的邮递员。”总的来说,我认为我们正在寻找meta.stackexchange.com/questions/66377/what-is-the-xy-problem,所以请退后一步,解释一下你真正想要以这种方式实现的目标。
-
@Yunnosch 我有一个常量数组。我正在尝试将每个插入一个函数。我不能使用简单的 for 循环,因为在 for 循环中迭代的变量不是常量表达式。我想我的问题更准确地描述为如何使用常量表达式索引遍历常量表达式,因此整个表达式是一个常量表达式。
-
请通过editing 解释您的问题。
-
@Yunnosch youtube.com/watch?v=9dfWzp7rYR4