C Lamda表示式的乙個妙用

2021-10-18 09:14:01 字數 1228 閱讀 5421

在專案程式設計中,經常會遇到類似這樣的需求:當verbosity設定大於等於1時,開啟debug列印;否則關閉列印。以下是一種常見的實現方法,因為log可能需要進行一些拼接或者計算,故在乙個print_log函式中實現。但這樣做有乙個問題,即使m_verbosity配置為0,print_log()這個函式作為debug的實參,也會被呼叫一次,只是最後在debug函式的執行過程中,沒有cout列印出來,這樣其實是浪費了cpu的效能的。

class mytest

中的**才會被cpu執行。

lambda表示式,其實稱之為 lambda自定義函式更合適。可以將乙個lambda表示式賦值給乙個std::function型別的變數。

關於lambda表示式,菜鳥教程頁面最下方的筆記可以看看。

注意,如果使用 值捕獲,則print()函式必須是const才能編譯通過,否則會報『this』 argument discards qualifiers [-fpermissive]的錯誤,參考

為實現上述功能,其實也可以捨棄lambda表示式,直接使用std::function,同樣可以達到效果。std::function的使用可參考我之前的博文:

//g++ -g -std=c++11 lambda.cpp -o sim

#include #include #include using namespace std;

// lambda表示式(或稱之為函式) 只有在被呼叫時,表示式中的內容,也就是{}中的** 才會被 cpu 執行

#define lazy_string(s) [&](){cout < 的形參

{if (this->m_verbosity < 1)

{cout<

debug function, verbosity <1. dont call print()

verbosity=1

call print() fcuntion

debug function, verbosity >=1, print

debug function, verbosity <1. dont call print()

c Lamda表示式 簡化語法例子

看到乙個老 裡的方法,是判斷兩個string 陣列是否存在相同的元素 快一百行 了。public bool hasrole string rolelist if result return result 用lamda表示式 簡化語法例子,3行就行了 string rolelis new string...

給出乙個表示式,求取表示式的值

include include include include include using namespace std 思路 1.字串預處理,針對可能出現的 等特殊情況進行替換,判斷 是負號還是減號,負號前面 0,轉變成減法運算 2.將中綴字串轉變為字尾字串陣列 3.對字尾字串陣列進行求解 int ...

基於Linq表示式做的乙個簡單的表示式生成器

using system using system.collections.generic using system.componentmodel.dataannotations.schema using system.linq using system.linq.expressions names...