【C++】37.为什么要使用Lambda表达式
生活随笔
收集整理的這篇文章主要介紹了
【C++】37.为什么要使用Lambda表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么要使用Lambda表達式?
- 1.可以在某個函數的函數體內直接定義,省了一步在外面定義函數的操作;
- 2.作為函數的參數,類似(可能就是)回調函數的作用。
1.可以在某個函數的函數體內直接定義,省了一步在外面定義函數的操作
Lambda表達式就是匿名函數,他可以用在某個函數內部,使用lambda表達式定義一個匿名函數,就像是一個正常的c++語句一樣,不需要額外定義一個函數。
一般情況下,這個lambda表達式的函數體比較短小,不要寫的太復雜;另外,lambda表達式函數體內也可以調用某個函數,他和正常函數沒什么兩樣,正常函數怎么用,lambda表達式就能怎么用。
如:
-> int是指定函數返回值類型為int,某些情況下可以省略,如,當返回值為void或者函數體中只有一處 return 的地方(此時編譯器可以自動推斷出返回值類型)。
2.作為函數的參數,類似回調函數的作用
當一個函數func的參數是lambda表達式時,基本上就能確定,該函數func的這個參數是一個回調函數的地址,在該函數內部會把這個lambda表達式賦值給這個形參,在內部進行調用。對于回調函數的知識如果不懂,可以參考函數指針和回調函數的博客原文鏈接:回調函數、注冊回調函數,其實就是晚綁定。
auto lambda_func = [](int x) { return x*x; }; typedef void (*func_ptr)(int);int func(func_ptr){func_ptr= lambda_func;func_ptr(10); // calls the lambda }類似的,還可以在多線程時使用。如:
std::thread([this](){Process();});上面這句話把一個復雜的函數Process()放到lambda表達式的函數體內部,就可以將這個lambda表達式作為參數傳入std::thread。
另外,也可以像下面直接這么用,但是下面單純為了展示這用法而這么用,沒什么意思:
auto lambda_func = [](int x) {return x*x;}; void (*func_ptr)(int) = lambda_func; func_ptr(10); // calls the lambda總結
以上是生活随笔為你收集整理的【C++】37.为什么要使用Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Tools】cmake之编写CMake
- 下一篇: 【数学和算法】插值方法