我能在变量声明中使用for循环吗?
int main() {
int a = {
int b = 0;
for (int i = 0; i < 5; i++) {
b += i;
}
return b;
};
printf("%d", a);
}
我能在变量声明中使用for循环吗?
int main() {
int a = {
int b = 0;
for (int i = 0; i < 5; i++) {
b += i;
}
return b;
};
printf("%d", a);
}
int main() {
int a = []{
int b = 0;
for (int i = 0; i < 5; i++) {
b += i;
}
return b;
}();
printf("%d", a);
}
注意,如果您尝试存储lambda函数,则必须立即执行它。因此,在结尾处需要额外加上()
。
如果您打算多次实例化重用lambda函数,则可以将其单独存储,如下所示:
int main() {
auto doCalculation = []{
int b = 0;
for (int i = 0; i < 5; i++) {
b += i;
}
return b;
};
int a = doCalculation();
printf("%d", a);
}
a
的上面再声明一个变量(unsigned char x = 7
),并且想要返回x*b
,会出现“error: void value not ignored as it ought to be”和“error: ‘x’ is not captured”的错误提示。 - John Doe[x]{}
,但没有代码很难说。请阅读更多关于Lambda和捕获的内容,例如在这里https://en.cppreference.com/w/cpp/language/lambda或简单地搜索该术语,那么你将会发现许多教程。 - deW1实际上已经由C++委员会准备好了..
constexpr
有许多尚未探索的用处
constexpr int b(int l) {
int b=0;
for (int i = 0; i < l; i++)
b += i;
return b;
}
int main() {
constexpr int a = b(5);
printf("%d", a);
}