c++11新特性_c++11新特性(四)
4、lambda、bind、function
4.1、直接lambda表達式
lamda表達式不僅僅是一個語法新特性,對于沒有用過java或C#lamda表達式讀者,C++11的lamda表達式在一定程度上還沖擊著你對傳統(tǒng)C++編程的思維和想法。
int main(){? ? auto add= [](int a, int b)->int{? ? ? ? return a + b;? ? };? ? int ret = add(1,2);? ? std::cout << "ret:" << ret << std::endl;? ? return 0;}解釋:
第3至5行為lamda表達式的定義部分
[]:中括號用于控制main函數(shù)與內(nèi)lamda表達式之前的變量在lamda表達式中的訪問形式;
(int a,int b):為函數(shù)的形參
->int:lamda表達式函數(shù)的返回值定義
{}:大括號內(nèi)為lamda表達式的函數(shù)體。
4.2、c++11風格的函數(shù)指針std::function & std::bind
int func1 (int a, int b) { return a + b; }auto a = 1, b = 2;std::function modify_add0(func1);LOG(INFO) << "directly assign function: " << modify_add0(a, b);通過指定返回值、參數(shù)列表、綁定的函數(shù)和函數(shù)名,定義一個函數(shù)(指針)modify_add0
綁定的函數(shù),可以是普通函數(shù),也可以是類成員函數(shù),同時指定:
class ca {public:bool func(int a) {LOG(INFO) << "aaa: " << a;}};ca o;std::function f = std::bind(&ca::func, o, std::placeholders::_1);f(1);原先只有在boost出現(xiàn)且極為受限的函數(shù)占位符,也加入到了標準庫,即std::placeholders,傳遞自定義參數(shù)
綁定類成員函數(shù)時,需要配合使用std:bind。
bind和placeholders,同樣可以用于普通函數(shù):
int func1(int a, int b) {b = a + a + a;return a + b;}auto a = 1, b = 2;auto auto1 = std::bind(func1, std::placeholders::_1, std::placeholders::_2);LOG(INFO) << "directly run auto: " << auto1(a, b);總結(jié)
以上是生活随笔為你收集整理的c++11新特性_c++11新特性(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: history linux 日志服务器_
- 下一篇: mysql更新数据索引慢_mysql添加