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; 
} 
+0

+1。我即将发布。但你已经做到了。 – Nawaz 2011-05-31 11:39:37

+0

感谢您的回答..是有explaing ..this点..in例一类的术语 – user751747 2011-05-31 13:30:13

+0

@user的任何方式/机会:哪点? “Class example”是什么意思? – kennytm 2011-05-31 14:38:16

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; 
+0

是上即时由compiler..atleast创建的闭包obj类型有任何机会,以检查它是否存在与否 – user751747 2011-05-31 11:40:29

+0

@user:你是什么意思与“存在”? – Xeo 2011-05-31 11:41:34