目錄
一、新關鍵字decltype
1 decltype定義
2 decltype三種用法之一用來宣告函式的返回值型別,一種新的指定函式返回值型別的方式
3 decltype三種用法之二模板之間的應用
4 decltype三種用法之三用來求lambda表示式的型別
二、lambda
2.1 lambda語法以及呼叫方式
2.2 lambda裡面對應的是乙個匿名的函式物件
2.3 lambda和函式物件(仿函式)的對比使用
引入新關鍵字decltype可以讓編譯器找出表示式的型別,為了區別typeof,以下做乙個概念區分:
理解為:我們根據typeof()括號裡面的變數,自動識別變數型別並返回該型別;
比如我想知道別人傳給我testvec的型別是什麼(前提是我只知道他是乙個容器),因為容器都有value_type這乙個屬性,我可以下面這麼寫
注意:下圖中的typename,因為編譯器編譯到這並不知道obj是什麼,這裡加::前面就必須要加上typename告訴編譯器這就是乙個型別,不然編譯器會猶豫不決
lambda是匿名的函式物件或仿函式,每乙個都是獨一無二的;
如果需要宣告乙個這種物件的話,需要用模板或者auto;
如果需要他的type,可以使用decltype;
lambda沒有預設建構函式和析構函式。
定義:lambda是一組功能的組合定義,lambda可以定義為內聯函式,可以被當做乙個引數或者乙個物件,類似於仿函式。
注意:加括號不是所謂的構造臨時物件,而是直接就呼叫(相對於其他用法的特殊形式)
: lambda匯入器,取用外部變數。
():類似函式引數
mutable:中的匯入資料是否可變
throwspec:丟擲異常
rettype:類似函式返回值
{} : 類似函式體
定義乙個lambda相當於定義乙個函式物件(即仿函式:乙個普通類並過載類的「()」運算子),但是由於lambda的奇特寫法,標準庫沒有提供預設建構函式和賦值函式的,並且裡面有乙個括號運算子過載函式,mutable(該關鍵字表示該函式是no-const,沒有該關鍵字表示是const型別)。
上圖說明:如果沒有mutable,進行++id是編譯不通過的,因為你是以value形式傳進來的引數;
出處:
python語言特性之裝飾器
首先,python裝飾器的作用是 在不改變原有函式實現的前提下,給此函式增加一些額外的功能 在原有函式呼叫之前或者呼叫之後 好像給原有函式加上了乙個裝飾的殼子。通過乙個例子解釋python裝飾器 coding utf8 def w1 func def inner args,kwargs print ...
C 記錄六 特性
是用於在執行時傳遞程式中各種元素 比如類 方法 結構 列舉 元件等 的行為資訊的宣告性標籤。您可以通過使用特性向程式新增宣告性資訊。表示方法被棄用,但是仍然可以使用 後面的括號內表示提醒的內容,當滑鼠放到應用的地方的時候,會有提示出現 第二個引數,bool型別,如果設定為true,那麼這個方法將無法...
PHP學習之六 語言雜項
1 關於引用的解釋 在php中,引用可以看作是與linux中的hardlink類似的東西,也叫別名,它與指標是不同的。不同的是php中的引用是可以複製的,如 a b c a 引用可以使得兩個變數指向對一塊內容,如 a b 引用可以傳遞變數,通過將乙個變數傳遞給函式,函式就可以修改其引數的值。只有變數...