您可以在类的初始化列表中使用 lambda 吗?
Can You Use a Lambda In A Class' Initialization List?
我正在尝试使用 C++11 Lambda 来初始化类的 const
成员变量。
一个简单得多的例子:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_( []() -> int { return 42; } )
{
}
int main()
{
Foo f;
}
在 MSVC10 中,这将产生:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
在 IDEONE 中,这会产生:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
我开始明白我不能在类的初始化列表中使用 lambda。
我可以吗? 如果是这样,正确的语法是什么?
您正在尝试从lambda转换为int - 您应该改为调用lambda:
Foo::Foo()
: n_( []() -> int { return 42; }() ) //note the () to call the lambda!
{
}
您的变量声明为 int
。
是否要调用 lambda?这应该有效:
n_(([]() -> int { return 42; })())
还是您想要一个类型 std::function<>
的变量?
您正在创建一个 lambda,正如编译器所述,您正在尝试将 lambda 本身存储在n_中。
相关文章:
- 列表.erase 中的 lambda 表达式
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 没有捕获列表的 lambda 通常作为普通函数实现吗?
- C++参数列表中带有省略号的 lambda
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 在没有捕获列表的情况下访问 lambda 中的变量
- Do=在lambda的捕获列表中捕获this指针
- 如何使可变 lambda 捕获列表的某些成员变得非常量
- 在类中使用时,lambda 捕获列表中的 [this] 和 [&] 是否等效?
- 为什么 lambda 表达式的捕获列表无法使用结构化绑定分解
- C++ lambda 参数列表
- 构造函数初始化列表中可变参数的Lambda捕获
- C++11 lambda捕获列表[=]使用引用
- 带有变量参数列表的c++11 lambda函数
- 构造函数初始值设定项列表中的 Lambda 可以使用哪些标识符
- 是否可以提取 lambda 的捕获列表
- 您可以在类的初始化列表中使用 lambda 吗?