六 語言特性之 decltype lambda

2021-10-11 13:04:07 字數 2384 閱讀 7297

目錄

一、新關鍵字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 引用可以傳遞變數,通過將乙個變數傳遞給函式,函式就可以修改其引數的值。只有變數...