gpt4 book ai didi

C++ lambda 表达式无法编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:05 25 4
gpt4 key购买 nike

我正在尝试使用 lambda 表达式 cin 循环索引值:

#include<iostream>
using namespace std;

int main(){
for(int a, ([](int & b){cin>>b;})(a); a < 2; ++a);
return 0;
}

这些是我在 ubuntu 上使用 g++ 4.5 编译时的错误:

forLoopAndCinTest.c++: In function ‘int main()’:
forLoopAndCinTest.c++:5:14: error: expected unqualified-id before ‘[’ token
forLoopAndCinTest.c++:5:14: error: expected ‘)’ before ‘[’ token
forLoopAndCinTest.c++:5:34: error: expected primary-expression before ‘)’ token
forLoopAndCinTest.c++:5:34: error: expected ‘;’ before ‘)’ token
forLoopAndCinTest.c++:5:40: error: name lookup of ‘a’ changed for ISO ‘for’ scoping
forLoopAndCinTest.c++:5:40: note: (if you use ‘-fpermissive’ G++ will accept your code)
forLoopAndCinTest.c++:5:50: error: expected ‘;’ before ‘)’ token

如果我使用普通函数而不是 lambda,程序编译得很好。
使用 -fpermissive 也无济于事。
有什么想法吗?

最佳答案

这不是 for 的工作方式。您正在尝试调用编译器希望您声明 int 的 lambda:

for( int a, int2, ...; a < 2; ++a );

现在,

If i use a normal function instead of the lambda, program compiles fine

是的,但它可能没有按照您的想法行事。

void f(int& b)
{
cin >> b;
}

// ...
for( int a, f(a); a < 2; ++a );

在这里,循环声明了两个 int 变量,分别命名为 af。循环不会像您预期的那样调用 f()

试试这个:

for( int a; cin >> a && a < 2; ++a );

关于C++ lambda 表达式无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com