1. 程式人生 > >C++11中的Lambda表示式構成之——捕獲值列表

C++11中的Lambda表示式構成之——捕獲值列表

摘抄之:捕獲值列表,是允許我們在Lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原有變數的值,按引用捕獲是可以在Lambda表示式中改變原有變數的值。

[捕獲值列表]:

1、空。沒有使用任何函式物件引數。

2、=。函式體內可以使用Lambda所在作用範圍內所有可見的區域性變數(包括Lambda所在類的this),並且是值傳遞方式(相當於編譯器自動為我們按值傳遞了所有區域性變數)。

3、&。函式體內可以使用Lambda所在作用範圍內所有可見的區域性變數(包括Lambda所在類的this),並且是引用傳遞方式(相當於編譯器自動為我們按引用傳遞了所有區域性變數)。

4、this。函式體內可以使用Lambda所在類中的成員變數。

5、a。將a按值進行傳遞。按值進行傳遞時,函式體內不能修改傳遞進來的a的拷貝,因為預設情況下函式是const的。要修改傳遞進來的a的拷貝,可以新增mutable修飾符。

6、&a。將a按引用進行傳遞。

7、a, &b。將a按值進行傳遞,b按引用進行傳遞。

8、=,&a, &b。除a和b按引用進行傳遞外,其他引數都按值進行傳遞。

9、&, a, b。除a和b按值進行傳遞外,其他引數都按引用進行傳遞。


相關推薦

C++11Lambda表示式構成——捕獲列表

摘抄之:捕獲值列表,是允許我們在Lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原有變數的

C++11Lambda表示式構成——捕獲列表型別解析

摘抄之:捕獲值列表,是允許我們在Lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原有變數的值

C++11Lambda表示式

    C++11的一大亮點就是引入了Lambda表示式。利用Lambda表示式,可以方便的定義和建立匿名函式。對於C++這門語言來說來說,“Lambda表示式”或“匿名函式”這些概念聽起來好像很深奧,但很多高階語言在很早以前就已經提供了Lambda表示式的功能,如C#,Pyth

c++11lambda表示式與傳統的函式指標

#include <iostream> using namespace std; #include <functional> //std::function 標頭檔案 //傳統的函式指標 typedef int(*fun0)(int n); int

C++11如何輸出enum class的

gic log its may aps cti return cout cast Unlike an unscoped enumeration, a scoped enumeration is not implicitly convertible to its intege

C++11的universal引用和右引用

stackoverflow上有個問題:Why “universal references” have the same syntax as rvalue references? 就是說為什麼這倆的形式都是T&&(T表示一個型別)。其中有一個回答很

C++11的`移動語義`與`右引用`的介紹與討論

本文主要介紹了C++11中的移動語義與右值引用, 並且對其中的一些坑做了深入的討論. 在正式介紹這部分內容之前, 我們先介紹一下rule of three/five原則, 與copy-and-swap idiom最佳實踐. 本文參考了stackoverflow上的一些回答. 不能算是完全原創 rule

C++11 lambda表示式不能捕獲map/unordered_map

先看一道面試題。 某公司中有N名員工,給定所有員工工資的清單,財務人員要按照持定的順序排列員工的工資,他按照工資的頻次降序排列,即給定清單中所有頻次較高的工資將在頻次較低的工資之前出現,如果相同數量的員工都有相同的工資,則將按照給定清單中該工資第一次出現的順序排列。 寫一演算法來幫助財務人員

lambda表示式 Python for迴圈lambda

Python 之 for迴圈中的lambda 第一種 f = [lambda x: x*i for i in range(4)]  (如果將x換成i,呼叫時候就不用傳引數,結果都為3) 對於上面的表示式,呼叫結果: >>> f = [lambda x:

C#Lambda表示式的使用方法

    Lambda表示式就是一個匿名函式,結構分左中右,左邊不需要寫函式名,只需要宣告函式所需要的引數列表,不需要型別說明,可以自己推斷出來,有些時候自己不能推斷出,也可標出引數型別,也可以沒有引數,就寫一個空的"()".     中間"=>",讀作goesto  

C++lambda表示式詳解與原理分析

lambda表示式的本質就是過載了()運算子的類,這種類通常被稱為functor,即行為像函式的類。因此lambda表示式物件其實就是一個匿名的functor。 C++中lambda表示式的構成 一個標準的lambda表示式包括:捕獲列表、引數列表、mu

14.C++11 新標準:foreach、右引用&&、lambda表示式、語言級別的執行緒與鎖

關鍵字和新語法 1、delete      指定刪除類的成員方法         在類的成員方法後面寫  = delete  就將該成員方法刪除,使用者無法呼叫。 智慧指標unique_ptr就是將物件的拷貝構造和operator=  delete刪除了 2、auto

C++11 的function和bind、lambda用法

get foo 隱式轉換 function for_each sstream ios 無法 href std::function 1. std::bind綁定一個成員函數 1 #include <iostream> 2 #include

C++11智能指針的原理、使用、實現

his animal something include expire another .cn 表現 oid 目錄 理解智能指針的原理 智能指針的使用 智能指針的設計和實現 1.智能指針的作用 C++程序設計中使用堆內存是非

C++11多線程庫

標準 value 生命周期 通過 死鎖 strong () 四種 ... 一、linux 線程同步 線程是在操作系統層面支持的,所以多線程的學習建議還是先找一本linux系統編程類的書,了解linux提供多線程的API。完全完全使用系統調用編寫多線程程序是痛苦,現

C++11對容器的各種循環遍歷的效率比較

ets normal pre unsigned int qdebug tex contain string 1 #include "CycleTimeTst.h" 2 #include <string> 3 #include <vector&

C++11lock_guard和unique_lock的區別

target san color member uri display each for clas c++11中有一個區域鎖lock_guard,還有第二個區域鎖unique_lock。 區域鎖lock_guard使用起來比較簡單,除了構造函數外沒有其他member fu

C++11的技術剖析( std bind原理簡單圖解)

簡化 靜態成員函數 div 語法 con mar clear 函數 多余 此文為轉載,好像原出處的原文已經無法打開了。 本文解釋了bind 是如何工作的。為了清晰,我對圖中的語法作了一些簡化(例如,省略函數調用操作符的參數類型),並且簡化了 bind 的實現. bin

[effective modern c++ 學習筆記] Lambda 表示式 徹底拋棄bind

要點總結 <1> lambda基本形式 [捕獲列表](形參表){函式體} std::find_if(container.begin(), container.end(),[](int val) { return 0 < val && val <

JDK 8 Lambda表示式的使用

環境準備JDK 8Lambda表示式的語法基本語法:(parameters) -> expression或(parameters) ->{ statements; }下面是Java lambda表示式的簡單例子: // 1. 不需要引數,返回值為 5 () -> 5