C++之lambda函數與std::bind區別及用法實例(二百八十)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長!

優質專欄:Audio工程師進階系列原創干貨持續更新中……】🚀
優質專欄:多媒體系統工程師系列原創干貨持續更新中……】🚀
優質視頻課程:AAOS車載系統+AOSP14系統攻城獅入門實戰課原創干貨持續更新中……】🚀

人生格言: 人生從來沒有捷徑,只有行動才是治療恐懼和懶惰的唯一良藥.

更多原創,歡迎關注:Android系統攻城獅

歡迎關注Android系統攻城獅

🍉🍉🍉文章目錄🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Lambda函數與std::bind介紹
    • 🌻3.代碼實例
      • 🐓3.1 Lambda函數示例
      • 🐓3.2 std::bind函數示例
      • 🐓3.3 Lambda函數和std::bind結合使用的示例

🌻1.前言

本篇目的:C++之lambda函數與std::bind區別及用法實例

🌻2.Lambda函數與std::bind介紹

  • C++11引入了lambda表達式,這是一種方便快捷的方式來創建匿名函數對象。Lambda函數在C++中非常有用,特別是在需要傳遞簡短的函數作為算法的參數時,例如在std::sort或std::find_if等算法中。Lambda函數可以有參數,并且可以包含一個表達式或者一個花括號內的一系列語句。
  • Lambda函數的基本語法如下:
[捕獲列表](參數列表) mutable -> 返回類型 {// 函數體
}
  • 捕獲列表用于指定lambda函數如何從外部環境捕獲變量。
  • 參數列表定義了函數的參數。
  • mutable修飾符允許在lambda函數中修改通過值捕獲的變量。
  • 返回類型可以使用auto推斷,或者顯式指定。
  • 函數體由花括號包圍,可以是單個表達式或者多條語句。
  • 例如,一個lambda函數,接受兩個整數參數并返回它們的和:
auto add = [](int a, int b) -> int { return a + b; };
  • std::bind函數用于綁定一個可調用對象(如函數、成員函數、Lambda表達式等)到一個或多個參數。這使得你可以創建一個新的可調用對象,該對象在調用時會使用綁定參數。std::bind常用于回調函數和函數對象,當你需要以特定參數列表調用一個函數,但是又不希望直接傳遞所有的參數時。
  • std::bind的基本語法如下:
std::bind(可調用對象, 參數列表)
  • 可調用對象是要綁定的函數或Lambda表達式。

  • 參數列表是要傳遞給可調用對象的參數。

  • Lambda函數與std::bind的主要區別在于:

  1. Lambda表達式創建的是一個匿名函數對象,它可以獨立使用,而std::bind返回的是一個新的可調用對象,它依賴于原始的可調用對象。
  2. Lambda表達式可以直接作為函數參數傳遞,而std::bind通常用于綁定成員函數,并且需要指定對象實例。
  3. Lambda表達式可以有返回類型,而std::bind返回的類型的確切形式取決于被綁定函數的返回類型和參數類型。
  • 總結來說,Lambda表達式和std::bind都是C++11中引入的有用特性,它們提供了不同的方式來創建和使用匿名函數。Lambda表達式適用于需要一個簡單的匿名函數對象的場景,而std::bind適用于需要將函數綁定到特定參數列表并創建一個新的可調用對象的場景。

🌻3.代碼實例

🐓3.1 Lambda函數示例

#include <iostream>int main() {// 一個lambda函數,接受兩個整數參數并返回它們的和auto add = [](int a, int b) -> int { return a + b; };// 使用lambda函數std::cout << add(10, 20) << std::endl; // 輸出30// 一個捕獲外部變量的lambda函數auto multiply = [x = 10](int y) -> int { return x * y; };std::cout << multiply(20) << std::endl; // 輸出200return 0;
}

🐓3.2 std::bind函數示例

#include <iostream>
#include <functional>class MyClass {
public:void myFunction(int a, int b) {std::cout << a + b << std::endl;}
};int main() {MyClass obj;// 使用std::bind綁定成員函數auto boundFunction = std::bind(&MyClass::myFunction, &obj, 10, 20);boundFunction(); // 輸出30return 0;
}

🐓3.3 Lambda函數和std::bind結合使用的示例

#include <iostream>
#include <functional>class MyClass {
public:void operator()(int a, int b) {std::cout << a + b << std::endl;}
};int main() {MyClass obj;// 使用lambda函數作為參數傳遞給成員函數auto memberLambda = [&obj](int a, int b) { obj(a, b); };// 使用std::bind將成員lambda函數綁定到成員函數auto boundMemberLambda = std::bind(memberLambda, 10, 20);boundMemberLambda(); // 輸出30return 0;
}

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

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

相關文章

202212青少年軟件編程(Python)等級考試試卷(四級)

第 1 題 【單選題】 有n個按名稱排序的商品,使用對分查找法搜索任何一商品,最多查找次數為 5 次, 則 n 的值可能為?() A :5 B :15 C :30 D :35 正確答案:C 試題解析: 對分查找最多查找次數m與個數之間 n 的關系是: n 對 2 的對數的取整后加 1,現在最多查找次數是…

LabVIEW如何實現多張圖拼接

在LabVIEW中實現相機多次拍攝進行拼接的過程&#xff0c;可以分為以下幾個步驟&#xff1a;設置相機參數、控制相機拍攝、圖像處理與拼接、顯示和保存結果。以下是一個詳細的實現方案&#xff1a; 1. 設置相機參數 首先需要配置相機的參數&#xff0c;例如分辨率、曝光時間、…

Java Swing + MySQL圖書借閱管理系統

系列文章目錄 Java Swing MySQL 圖書管理系統 Java Swing MySQL 圖書借閱管理系統 文章目錄 系列文章目錄前言一、項目展示二、部分代碼1.Book2.BookDao3.DBUtil4.BookAddInternalFrame5.Login 三、配置 前言 項目是使用Java swing開發&#xff0c;界面設計比較簡潔、適合作…

Qt中信號和槽解決了什么問題

信號和槽解決了什么問題 Qt 中的信號和槽機制是一種用于處理對象之間通信的重要機制,它解決了以下幾個問題: 對象之間的解耦(Decoupling): 問題: 在一個系統中,如果對象之間直接調用彼此的方法,就會形成緊密耦合的結構。這樣的耦合使得對象難以獨立地變更和維護,而且…

react-d3-tree:React組件創建交互式D3樹形圖

在這里插入代碼片import React from "react"; import ReactDOM from "react-dom"; import Tree from "react-d3-tree";import "./styles.css";const myTreeData [{name: "Gaurang Torvekar",attributes: {keyA: "val …

【軟考】2024年5月系統架構設計師考試感受

一 考試時間 5???25日上午: 8點30-12點30: 綜合知識和案例分析?? 5???25日下午: 14點30-16點30: 論文?? 二 考試感受 2024年5月25日早上5點多一點,我就起床了????。簡單洗漱后,就準備出門。可是,天吶,我的手機??忘記充電了,所以就趕緊應急充會電??…

基于Llama 3搭建中文版(Llama3-Chinese-Chat)大模型對話聊天機器人

前面兩篇博文&#xff0c;我們分別在個人筆記本電腦部署了Llama 3 8B參數大模型&#xff0c;并使用Ollama搭建了基于 Web 可視化對話聊天機器人&#xff0c;可以在自己電腦上愉快的與Llama大模型 Web 機器人對話聊天了。但在使用過程中&#xff0c;筆者發現Llama大模型經常出現…

匯編一:匯編語言前的基礎知識

計算機的工作原理就是取址執行,在哪兒執行呢,在cpu里面執行,從哪里面去取址呢?從內存中去取址,內存又被叫做存儲器 可是,cpu和存儲器是2個分開的硬件設備,那么是怎么做到把存儲器里面的東西傳給cpu呢,這就需要總線了 1.總線 總線一共可以分為3種, 一種是數據總線,一種是控制總…

OpenWrt U盤安裝使用 詳細教程 x86/64平臺 軟路由實測 系列一

1 官方穩定 版:OpenWrt 23.05 OpenWrt Downloads #根據實際情況選擇 PC支持uefi,選擇版本&#xff1a;https://downloads.openwrt.org/releases/23.05.3/targets/x86/64/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img.gz 2 rufus 制作U盤啟動 3 制作好的U盤,接入主…

Redux基礎

簡介 狀態管理工具&#xff0c;集中式管理react、vue、angular等應用中多個組件的狀態&#xff0c;是一個庫,使用之后可以清晰的知道應用里發生了什么以及數據是如何修改&#xff0c;如何更新的 在項目中添加 Redux 并不是必須的,根據項目需求選擇是否引入 Redux 三個原則 …

Linux部分漏洞處理

1、ICMP timestamp請求響應漏洞 ICMP timestamp請求響應漏洞是指&#xff0c;當網絡設備接收到ICMP timestamp請求時&#xff0c;它會返回當前時間戳作為響應&#xff0c;這可能導致設備的時間戳被暴露&#xff0c;進而可能被用于計算機時間戳協議&#xff08;TLS&#xff09;的…

PDF.js

什么是 PDF.js&#xff1f; PDF.js 是由 Mozilla 開發的一個用于呈現 PDF 文件的 JavaScript 庫。它允許開發者將 PDF 文件直接嵌入到網頁中&#xff0c;而無需使用插件或其他外部工具。PDF.js 使用 HTML5 技術&#xff0c;利用 Canvas 元素來呈現 PDF 內容&#xff0c;并提供…

基于集成經驗模態分解的心電信號降噪和基于希爾伯特變換的R峰檢測(MATLAB R2018)

近年來&#xff0c;心臟病已成為危害人類健康最常見的疾病。為了有效預防心臟疾病的發生&#xff0c;往往需要更加準確地采集與診斷心電信號&#xff0c;以便于更好地反映心臟情況。心電信號作為人體生理信號&#xff0c;對于識別心臟異常和心臟疾病具有重要的參考價值。心電信…

ubuntu如何安裝gitlab runner

一、什么是GitLab Runner GitLab Runner 是 GitLab 提供的一個開源工具,用于在構建、測試和部署過程中執行作業。它是 GitLab 持續集成和持續部署(CI/CD)工作流的核心組件之一。 GitLab Runner 有以下主要功能: 作業執行:GitLab Runner 會接收來自 GitLab 的作業請求,并在指定…

ROS基礎學習-ROS通信機制研究

研究ROS通信機制 研究ROS通信機制 0.前言1.話題通信1.1 理論模型1.2 話題通訊的基本操作1.2.1 C++1.2.2 Python0.前言 機器人是一種高度復雜的系統性實現,在機器人上可能集成各種傳感器(雷達、攝像頭、GPS…)以及運動控制實現,為了解耦合,在ROS中每一個功能點都是一個單獨的…

從File類開始,學習Java文件操作

哈嘍&#xff0c;各位小伙伴們&#xff0c;你們好呀&#xff0c;我是喵手。運營社區&#xff1a;C站/掘金/騰訊云&#xff1b;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相學習&#xff0c;一…

windows安裝SQL Server

1、下載 下載網頁&#xff1a;SQL Server 下載 | Microsoft 2022版下載地址&#xff1a;https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下載結果&#xff1a;SQL2022-SSEI-Dev.exe 打開選第三個&#xff0c;下載介質&…

自定義Linux命令,顯示docker鏡像、容器信息

1、修改環境變量&#xff08;僅對當前用戶有效&#xff09; vim ~/.bashrc2、給命令取別名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、讓配置重新生效 source ~/.bashrc4、測試&…

ChatGPT技術演進簡介

chatGPT&#xff08;chat generative pre-train transformer&#xff0c; 可以對話的預訓練trasformer模型&#xff09;&#xff0c;討論點&#xff1a; 1、chatGPT為什么突然火了 2、GPT 1.0、2.0、3.0、3.5 、4和4o區別和特性&#xff0c;在不同應用場景中如何選對模型 3、未…

基于ESP8266的無線通信系統設計

本文介紹了一種基于ESP8266的無線通信系統設計方案。ESP8266是一款功能強大且成本低廉的WiFi模塊&#xff0c;非常適合用于構建無線通信系統。本設計主要圍繞ESP8266模塊的功能特點&#xff0c;闡述了系統的硬件組成、軟件設計以及實際應用示例。 關鍵詞&#xff1a;ESP8266&a…