C 11新特性(7) decltype修飾符

2021-08-18 12:55:15 字數 671 閱讀 4850

功能介紹

在存在初始化**的情況下,可以使用auto來自動決定變數的型別。還存在另外一種情況,我們希望變數的型別通過初始化**以外的表示式推斷得到。

假設有下面的結構體:

struct

point;

在其他地方,可能這樣定義point型別的變數:

point

point;

同樣我們也可以定義指向point的指標:

point*p1=nullptr;

在c++11中提供了另一種方式來決定變數的型別:decltype修飾符。利用它可以通過表示式的型別來決定變數的型別:

decltype(point)*p2=

nullptr;

這兩種方式有什麼不同呢?當point的型別發生變化時,p1的型別需要一起修改,p2的型別就不需要修改。

這和sizeof()的引數提倡使用變數名而不是資料型別是一樣的道理。

作者觀點

劉備說:勿以惡小而為之,勿以善小而不為。好的程式也應該從一點一滴的地方開始改善。

C 11特性 decltype關鍵字

我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...

C 11特性 decltype關鍵字

我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...