lambda的别名 ISO C++ + FAQ(“模板别名”)引用以下例子: using P = [](double)->void; // using plus suffix return type

lambda的别名 ISO C++ + FAQ(“模板别名”)引用以下例子: using P = [](double)->void; // using plus suffix return type,c++,c++11,C++,C++11,试图用g++-std=c++11编译此文件时出错: error: expected type-specifier before ‘[’ token 正确的语法应该是什么?如果我这样做 auto p = [](double)->void {}; p被推断为或main()::,具体取决于作用域。然而,我不能这样做 using P = <lambda(double)>; 使用P=; 因为这也会产生一个错误: expected type-specifier before ‘&l

试图用g++-std=c++11编译此文件时出错:

error: expected type-specifier before ‘[’ token
正确的语法应该是什么?如果我这样做

auto p = [](double)->void {};
p被推断为
main()::
,具体取决于作用域。然而,我不能这样做

using P = <lambda(double)>;
使用P=;
因为这也会产生一个错误:

expected type-specifier before ‘<’ token

“之前需要的类型说明符已修复!更新后的条目如下:

using P = auto (*)(double)->void;

根据,lambda表达式是:

但我建议您只使用函数指针或
std::function
,这取决于您的用例,因为每个lambda都有不同的类型


既不是类型,也不是对象。这只是编译器的一种方法,引用一个特定的lambda,它不是有效C++。

MMMH,这是坏的。为什么你需要为lambda别名?函数指针如何:使用FunctionPtr=void(*)(double);不是答案,而是
使用P=std::function
可能对您有用,因为lambda可以转换为std::函数。@Dana Yan:我只是询问FAQ是否正确-似乎不正确。@SirVisto A lambda是。Rakete1111的答案相当不错。
lambda-expression:
    lambda-introducer lambda-declarator[opt] compound-statement
    lambda-introducer < template-parameter-list > lambda-declarator[opt] compound-statement
auto p = [](double) -> void {};
using P = decltype(p);