C++ C+中的Lambda+;0x:错误:请求从转换为非标量类型
我在编译lambda函数时遇到了一个问题:C++ C+中的Lambda+;0x:错误:请求从转换为非标量类型,c++,qt,lambda,C++,Qt,Lambda,我在编译lambda函数时遇到了一个问题: ... (int level = 3) ... QString str = [level] {QString s;for(int i=0;i++<level;s.append(" "));return s;}; 另一种变体: QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;}; error: expect
... (int level = 3) ...
QString str = [level] {QString s;for(int i=0;i++<level;s.append(" "));return s;};
另一种变体:
QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;};
error: expected token ';' got 'str'
QString str=[level]->QString{QString s;for(int i=0;i++您尝试将lambda分配给QString
。您希望发生什么?不带参数的lambda是一个空函数。您需要调用它以获取其返回值
e、 g
另外,谢谢你给我展示了无参数lambda的语法。我不知道这是可能的。我也有点不确定它是否真的合法
编辑:它是合法的。5.1.2
lambda-expression:
lambda-introducer lambda-declarator{opt} compound-statement
lambda-declarator:
(parameter-declaration-clause) mutable{opt}
Lambda是基本结构为[capture](arguments){code}
的匿名函数。您不能将参数传递给Lambda。我想您需要
QString str = [](int x){QString s;for(int i=0;i++<x;s.append(" "));return s;} (level);
// ^^ lambda starts here argument to lambda ^^
QString str=[](int x){QString s;for(int i=0;i++来自C++11标准,5.1.2.2(由我缩短)
lambda表达式的类型(也是闭包对象的类型)是一个唯一的、未命名的非联合类类型,称为闭包类型,其属性如下所述。[更多文本如下]
因此,其他人说,QString
和lambda的类型不兼容。这是合法的。在5.1.2.4
中:“如果lambda表达式不包含lambda声明符,就好像lambda声明符是()”。认为这是合法的,int main(){auto f=[]{return 23;};return f();}
@jrok谢谢。我刚刚也确认了这一点,并添加了相关的语法产品。谢谢@pmr!我忘了()
QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;};
error: expected token ';' got 'str'
int x = [] { return 23; }();
^^
call
lambda-expression:
lambda-introducer lambda-declarator{opt} compound-statement
lambda-declarator:
(parameter-declaration-clause) mutable{opt}
QString str = [](int x){QString s;for(int i=0;i++<x;s.append(" "));return s;} (level);
// ^^ lambda starts here argument to lambda ^^