【C++】——lambda表達式

🌟 前言:??C++ Lambda表達式,當函數開始"叛逆期"??

你是否有過這樣的崩潰瞬間?

  • 為了寫個??只用到一次??的排序規則,被迫定義了一個類
  • std::for_each里塞函數指針,代碼瞬間變成"古董級"寫法
  • 看著層的循環變量捕獲,眼睛開始表演"蚊香特效"

歡迎來到??C++ Lambda的世界??——這里,函數可以:
?? ??就地定義??(不用滿世界聲明)
🎭 ??攜帶狀態??(像特務接頭自帶密碼本)
🚀 ??即寫即用??(寫完直接扔進算法,連名字都懶得取)

[ ]的捕獲列表到( )的參數列表,再到->的尾置返回類型...
這簡直就是??函數界的變形金剛??!?

??準備好顛覆你對函數的認知了嗎???
(溫馨提示:閱讀后可能導致看普通函數時產生"戒斷反應")

"在C++的世界里,Lambda就是那個打破規矩的酷小孩"?💥

🌟 ??C++ Lambda表達式:函數界的"變形金剛"??

??一句話定義??:
Lambda表達式是C++11引入的??匿名函數對象??,允許你在代碼中就地定義一個小型函數,無需正式聲明。

??🔍 核心特征(為什么說它叛逆?)??

  1. ??即用即拋??:隨寫隨用,不用起函數名(就像函數界的"臨時工")
  2. ??自帶干糧??:通過捕獲列表[ ]可以"偷取"外部變量(普通函數做不到!)
  3. ??變形能力??:能偽裝成函數指針、函數對象、甚至閉包(真正的"戲精")

? 標準語法解剖?

[捕獲列表](參數列表) -> 返回類型 { // 函數體
}

1. 捕獲列表?[ ]?—— Lambda的"背包"??

??作用??:決定Lambda可以帶哪些"外部零食"(變量)進函數體

捕獲方式:

int a = 1, b = 2;[]        // 空背包(不帶任何外部變量)
[a]       // 值捕獲(復制a的值,原變量不可修改)
[&b]      // 引用捕獲(直接操作原變量b)
[=]       // 值捕獲所有可見變量(a和b都復制)
[&]       // 引用捕獲所有可見變量
[this]    // 捕獲當前類的this指針
[a, &b]   // 混合捕獲(a值捕獲,b引用捕獲)

特殊技巧??:

[=, &b]    // 默認值捕獲,但b單獨引用捕獲
[&, a]     // 默認引用捕獲,但a單獨值捕獲

?? 注意事項??:

  • 引用捕獲要小心變量生命周期(防止懸空引用)
  • 值捕獲的變量默認是const,加mutable才能修改:
[a]() mutable { a++; }  // 允許修改值捕獲的副本

2. 參數列表?( )?—— Lambda的"入口"??

??用法??:和普通函數參數完全一致

[](int x, std::string s) { /*...*/ }  // 顯式參數
auto f = [](auto x) { return x*2; };  // C++14支持auto參數

特殊形式??:

[] { return 42; }          // 無參數時可省略()
[](auto... args) { /*...*/ } // 可變參數模板(C++14)

3. 返回類型?->?—— Lambda的"出口"??

??規則??:

  • 簡單返回可自動推導(省略->
[](int x) { return x*2; }  // 自動推導為int
  • 復雜邏輯需顯式聲明:?
[](int x) -> float { if(x > 0) return 1.5f;else return -1.5f;     // 必須明確返回類型
}

特殊場景??:

[]() -> auto { return complexObj; }  // C++14支持auto返回
[]() decltype(auto) { return expr; } // 完美保持返回類型

為什么這樣設計???

Lambda通過這三個組件的組合,實現了:

  • ??上下文感知??(捕獲列表)
  • ??接口標準化??(參數列表)
  • ??類型安全性??(返回類型)
    三者協作讓匿名函數既強大又安全! 🚀

🌟 ??結語:讓Lambda成為你的C++超能力??

當你第一次看到?[ ](){ }?這堆符號時,是不是覺得像在破譯外星密碼?🛸 而現在,你已經掌握了這把瑞士軍刀般的語法利器!

從今往后,你可以:

  • ??在算法調用處就地寫函數??,再也不用翻幾百行找函數定義
  • ??像特工一樣"竊取"外部變量??,打破作用域的限制
  • ??用更少的代碼做更多的事??,讓STL算法煥發新生

記住這個編程真理:
??"普通程序員寫循環,C++高手寫Lambda"?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901400.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析B站androidApp接口:從bilibili.api.ticket.v1.Ticket/GetTicket到SendMsg的技術分析

前言 最近一段時間,我對B站的App接口進行了深入分析,特別是關注了認證機制和私信功能的實現。通過逆向工程和網絡抓包,發現了B站移動端API的底層工作原理,包括設備標識生成機制、認證流程和消息傳輸協議。本文將分享這些研究成果…

從零開始學A2A一:A2A 協議概述與核心概念

A2A 協議概述與核心概念 學習目標 基礎理解 掌握A2A協議的基本概念和背景理解協議的設計原則和核心思想了解協議在AI領域的重要性 技術掌握 熟悉A2A協議的核心功能組件掌握能力發現和任務管理機制理解多模態交互和安全通信原則 實踐應用 能夠設計基于A2A的智能體系統掌握協議…

2025.04.10-拼多多春招筆試第三題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 03. 數字重排最大化問題 問題描述 LYA是一位專業的數字設計師。她手中有兩個數字序列 s 1 s_1

蒼穹外賣day04

Spring Task實現定時處理訂單狀態 作用:不需要輸入提示信號,便可定時自動執行程序 使用步驟 1、啟動類上加上注解(EnableScheduling)開啟定時任務調度 2、專門創建一個包來管理執行定時任務的類,該類需要交給IOC容…

BFD:網絡鏈路檢測與聯動配置全攻略

目錄 BFD簡介 BFD會話建立方式和檢測機制 BFD會話建立過程 BFD工作流程 聯動功能 BFD與OSPF聯動配置需求 BFD與OSPF聯動配置實現 BFD與VRRP聯動配置需求 BFD與VRRP聯動配置實現 單臂回聲 BFD默認參數及調整方法 BFD簡介 一種全網統一、檢測迅速、監控網絡中鏈…

【LLM】A2A 與 MCP:剖析 AI Agent 互聯時代的兩種關鍵協議

隨著人工智能技術的飛速發展,AI Agent(智能體)正從理論走向實踐,有望成為提升生產力的關鍵。然而,正如歷史上任何新興技術領域一樣,標準的缺失導致了“筒倉效應”——不同來源、不同框架構建的 Agent 難以有…

免費下載 | 2025清華五道口:“十五五”金融規劃研究白皮書

《2025清華五道口:“十五五”金融規劃研究白皮書》的核心內容主要包括以下幾個方面: 一、五年金融規劃的重要功能與作用 凝聚共識:五年金融規劃是國家金融發展的前瞻性謀劃和戰略性安排,通過廣泛聽取社會各界意見,凝…

滾輪控制目標臂長度調整相機距離

通過鼠標滾輪來控制攝像機目標臂長度 , 調整相機距離 看圖就行,不多說,照著連就完事了

kernel32!GetQueuedCompletionStatus函數分析之返回值得有效性

第一部分://#define STATUS_SUCCESS 0x0返回值為0 } else { // // Set the completion status, capture the completion // information, deallocate the associated IRP, and // attempt to write the…

UE5 Chaos :渲染網格體 (Render Mesh) 和模擬網格體 是如何關聯的?為什么模擬網格體 可以驅動渲染網格體?

官方文獻:https://dev.epicgames.com/community/learning/tutorials/pv7x/unreal-engine-panel-cloth-editor 這背后的核心是一種常見的計算機圖形學技術,通常稱為代理綁定 (Proxy Binding) 或 表面變形傳遞 (Surface Deformation Transfer)。 關聯機制…

老舊測試用例生成平臺異步任務與用戶通知優化

在現代 Web 開發中,異步任務處理和用戶通知是兩個重要的功能。由于老舊測試平臺【測試用例生成平臺,源碼分享】進行智能化升級后,未采用異步任務處理,大模型推理時間較長,導致任務阻塞,無法處理其他任務&am…

Java使用ANTLR4對Lua腳本語法校驗

文章目錄 什么是ANTLR?第一個例子ANTLR4 的工作流程Lua腳本語法校驗準備一個Lua Grammar文件maven配置新建實體類Lua語法遍歷器語法錯誤監聽器單元測試 參考 什么是ANTLR? https://www.antlr.org/ ANTLR (ANother Tool for Language Recognition) is a…

觀察者模式(行為模式)

觀察者模式 觀察者模式屬于行為模式,個人理解:和發布訂閱者魔模式是有區別的 細分有兩種:推模式和拉模式兩種,具體區別在于推模式會自帶推送參數,拉模式是在接收通知后要自己獲取更新參數 觀察者模式(Obs…

內網滲透 --- 之殺軟工具探測

目錄 內網殺軟探測與應對實戰方案 一、總體思路 二、探測階段——殺軟工具與手法 2.1 進程與服務檢測 2.2 注冊表與文件系統檢測 2.3 Nmap 與 NSE 腳本掃描 三、處理階段——探測到殺軟后的應對措施 3.1 分析評估 3.2 應對策略 四、判斷與驗證——注入 webshell 后如…

(2025親測可用)Chatbox多端一鍵配置Claude/GPT/DeepSeek-網頁端配置

1. 資源準備 API Key:此項配置填寫在一步API官網創建API令牌,一鍵直達API令牌創建頁面創建API令牌步驟請參考API Key的獲取和使用API Host:此項配置填寫https://yibuapi.com/v1查看支持的模型請參考這篇教程模型在線查詢 2. ChatBox網頁版配…

【Pandas】pandas DataFrame keys

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前幾行DataFrame.at快速訪問和修改 DataFrame 中單個值的方法DataFrame.iat快速訪問和修改 DataFrame 中單個值的方法DataFrame.loc用于基于標簽(行標簽和列標簽&#…

Redis存儲“大數據對象”的常用策略及StackOverflowError錯誤解決方案

Hi,大家好,我是灰小猿! 在一些功能的開發中,我們一般會有一些場景需要將得到的數據先暫時的存儲起來,以便后面的接口或業務使用,這種場景我們一般常用的場景就是將數據暫時存儲在緩存中,之后再…

【Python】讀取xyz坐標文件輸出csv文件

Python讀取xyz坐標文件輸出csv文件 import sys import numpy as np import pandas as pd from tqdm import tqdm import cv2 import argparsedef read_xyz(file_path):with open(file_path, "r") as f: # 打開文件data f.readlines() # 讀取文件datas []for …

leetcode 139. Word Break

這道題用動態規劃解決。 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet;for(string& word:wordDict){wordSet.insert(word);}int s_len s.size();//s的下標從1開始起算&#xff0c;dp[j]…

驅動開發硬核特訓 · Day 11(下篇):從 virtio_blk 看虛擬總線驅動模型的真實落地

&#x1f50d; B站相應的視屏教程&#xff1a; &#x1f4cc; 內核&#xff1a;博文視頻 - 總線驅動模型實戰全解析 敬請關注&#xff0c;記得標為原始粉絲。 &#x1f527; 在上篇中&#xff0c;我們已經從理論視角分析了“虛擬總線驅動模型”在 Linux 驅動體系中的獨特定位。…