cpp 内嵌函数(lambda,struct)

auto testFun = [this](int t)->void{

}

[]()->反回值{

}

[]内传入函数运行环境所用变量

()内传入变量

 

捕捉块

lambda表达式的方括号部分称为lambda捕捉块(capture block),在这里可以指定如何从所在作用域中捕捉变量。

捕捉变量的意思是可以在lambda表达式主体中使用这个变量。有两种方式:

[=]:通过值捕捉所有变量

[&]:通过引用捕捉所有变量

指定空白的捕捉块[]表示不从所在作用域中捕捉变量。还可以酌情决定捕捉那些变量以及这些变量的捕捉方法,方法是指定一个捕捉列表,其中带有可选的 默认捕捉选项。前缀为&的变量通过引用捕捉。不带前缀的变量通过值捕捉。默认捕捉应该是捕捉列表中的第一个元素,可以是=或&。

例如:

[&x]只通过引用捕捉x,不捕捉其他变量。

[x]只通过值捕捉x,不捕捉其他变量。

[=, &x, &y]默认通过值捕捉,变量x和y例外,这两个变量通过引用捕捉。

[&, x]默认通过引用捕捉,变量x例外,这个变量通过引用捕捉。

[&x, &y]非法,因为标志符不允许重复。

通过引用捕捉变量的时候,一定保证党lambda表达式在执行的时候,这个引用还是可用的。

 

----------------------------------------

cpp内嵌函数

void Class1::C1Fun1(){
    struct Local
    {
        static void Fun1(){}
        void Fun2(){}
    }
    Local::Fun1();
    Local l;
    l.Fun2();
}

 

posted @ 2016-06-01 14:36  晨祷  阅读(565)  评论(0编辑  收藏  举报