Lambda表达式
从ISO草案n3290 5.1.2节段,点19的点:Lambda表达式
与 λ-表达相关的闭合类型具有删除 (8.4.3)默认的构造和 删除复制分配操作员。它 有一个隐式声明的拷贝构造函数 (12.8),并且可以具有 隐式声明的举动构造 (12.8)。 [注:复制/移动 构造函数被隐含在 定义的方式与任何其他隐含 声明复制/移动构造函数 被隐含定义相同。 - 注意]
请问任何人....请告诉一些例子,了解这一点?
是否有机会/方法来检查闭包对象(类)?
具有λ表达相关的闭合类型具有删除(8.4.3)默认的构造
int main() {
auto closure = [](){};
typedef decltype(closure) ClosureType;
ClosureType closure2; // <-- not allowed
return 0;
}
和删除的拷贝赋值运算符。它有一个隐式声明的拷贝构造函数(12.8),可能有一个隐式声明的移动构造函数(12.8)。
#include <utility>
int main() {
auto closure = [](){};
typedef decltype(closure) ClosureType;
ClosureType closure2 = closure; // <-- copy constructor
ClosureType closure3 = std::move(closure); // <-- move constructor
closure2 = closure3; // <-- copy assignment (not allowed)
return 0;
}
struct LambdaExample{
// deleted operations = not allowed
LambdaExample() = delete;
LambdaExample& operator=(LambdaExample const&) = delete;
// generated by the compiler:
LambdaExample(LambdaExample const& other);
LambdaExample(LambdaExample&& other);
// anything else a lambda needs
};
关于第二个问题,如果你的意思是,你可以看看到执行,那么没了,不可能的。它由编译器实时创建。如果你的意思是获得拉姆达的类型,当然:
auto l = [](){};
typedef decltype(l) closure_type;
是上即时由compiler..atleast创建的闭包obj类型有任何机会,以检查它是否存在与否 – user751747 2011-05-31 11:40:29
@user:你是什么意思与“存在”? – Xeo 2011-05-31 11:41:34
+1。我即将发布。但你已经做到了。 – Nawaz 2011-05-31 11:39:37
感谢您的回答..是有explaing ..this点..in例一类的术语 – user751747 2011-05-31 13:30:13
@user的任何方式/机会:哪点? “Class example”是什么意思? – kennytm 2011-05-31 14:38:16