C++11特性:匿名函数
匿名函数
每当我们使用C++创建一个函数的时候,都必须定义然后再使用。然后在有些情况下,我们不一定需要创建函数,然后再将函数的地址传入变量中。在C++11之前,C#语言支持匿名函数,也就是不需要定义函数的名称只需定义函数体及参数或者外部变量是否能够在匿名函数中使用、及外部变量在函数体中的使用方式。
匿名函数的定义方式如下:定义好匿名函数后我们怎么调用它?//[]中填写外部变量怎么在匿名函数内使用:&(引用模式) =(赋值模式) //()中填写函数的参数 //{}中编写匿名函数的函数体 [](){ std::cout << "The function is the Niming function!" << std::endl; };
这里因为我们不知到函数的函数名称,因此可以使用指针的方式或者auto关键字方式,如:函数指针方式:auto关键字方式://定义一个函数指针 void(*p)(); //[]中填写外部变量怎么在匿名函数内使用:&(传值) =(赋值) //()中填写函数的参数 //{}中编写匿名函数的函数体 p = [](){ std::cout << "The function is the Niming function!" << std::endl; }; //通过指针来调用函数 p();
//[]中填写外部变量怎么在匿名函数内使用:&(传值) =(赋值) //()中填写函数的参数 //{}中编写匿名函数的函数体 auto p = [](){ std::cout << "The function is the Niming function!" << std::endl; }; //通过指针来调用函数 p();
[]外部变量的使用模式
通常如果不在[]中指定相应的模式,那么系统认为你在匿名函数中不使用外部变量,当制定的以下的模式后,匿名函数才能使用外部变量。[]:不使用外部变量[&]:外部变量的引用传进来使用[=]:与普通的外部变量在函数体内使用一样,通过将外部变量拷贝一份临时变量在匿名函数内部使用[index]:只在函数中使用外部变量index[this]:能够在函数中使用当前类的对象