typedef宣告提供了一種將識別符號宣告為型別別名的方法,用於替換複雜的型別名。
解釋
在宣告中使用typedef說明符時,會指定這個宣告是typedef宣告,而不是變數或函式宣告。通常,typedef說明符出現在宣告的開頭,但允許它出現在型別說明符之後,或者出現在兩個型別說明符之間。
typedef宣告可以在同一行上宣告乙個或多個識別符號(例如int和指向int的指標),它可以宣告陣列和函式型別、指標和引用、類型別等。此宣告中引入的每個識別符號都成為typedef名稱,只是省略了typedef。
typedef說明符不能與除型別說明符之外的任何其他說明符組合。
typedef名稱是現有型別的別名,不是新型別的宣告。typedef不能用於更改現有型別名稱(包括typedef名稱)的含義。一旦宣告,typedef名稱只能重新宣告為再次引用同一型別。typedef名稱僅在其可見的範圍內有效:不同的函式或類宣告可以定義具有不同含義的同名型別。
用於鏈結的typedef名稱
形式上,如果typedef宣告定義了乙個未命名的類(class)或列舉(enum),那麼宣告這個宣告的第乙個typedef名稱將被用來表示類型別或列舉型別,僅用於鏈結目的。例如,在typedef struct s;
中,s是用於鏈結的typedef名稱。以這種方式定義的類或列舉型別具有外部鏈結(除非它位於未命名的命名空間中)。
以這種方式定義的未命名類應該只包含c相容的構造。尤其是,它不能:
所有成員類也必須滿足這些要求(遞迴地)。
注意
type alias使用不同的語法提供與typedef相同的功能,並且也適用於模板名稱。
例子
// 最簡單的typedef使用
typedef
unsigned
long ulong;
// 如下的兩個物件具有相同的型別
unsigned
long l1;
ulong l2;
// 以下定義了更複雜的型別
typedef
int int_t,
*intp_t,
(&fp)
(int
, ulong)
, arr_t[10]
;// 下列兩個物件具有相同的型別
int a1[10]
;arr_t a2;
// c語言中通常使用的避免寫「struct s」的方式
typedef
struct
s,*ps;
// 以下兩個物件具有相同的型別
ps ps1;
s* ps2;
// 下面的語句會報錯,因為儲存類說明符(storage-class-specifier)static不能在typedef宣告**現
// typedef static unsigned int uint;
// typedef可以在宣告語句的任何位置出現
long
unsigned
typedef
intlong ullong;
// 但是上述的語句我們通常的使用方法是"typedef unsigned long long int ullong;"
// std::add_const, like many other metafunctions, use member typedefs
template< class t>
struct add_const
;typedef
struct node listnode;
// error: conflicts with the previously declared struct name
官方文件 c 中map常見用法說明
c 中map提供的是一種鍵值對容器,每一對中的第乙個值稱之為關鍵字 key 每個關鍵字只能在map 現一次 第二個稱之為該關鍵字的對應值。標頭檔案 include map int,string id name 使用 賦值是從c 11開始的,因此編譯器版本過低時會報錯,如visual studio 2...
Python 中bisect用法說明
bisect是python內建模組,用於有序序列的插入和查詢。插入 import bisect arr 1 3,3 6,8 12,15 value 3idx left bisect.bisect left arr,value print idx left idx right bisect.bisec...
C 泛型用法說明
泛型是c 2.0 語言和公共語言執行庫 clr 中的乙個新功能。泛型將型別引數的概念引入 net framework 型別引數使得設計如下類和方法成為可能 這些類和方法將乙個或多個型別的指定推遲到客戶端 宣告並例項化該類或方法的時候。例如,通過使用泛型型別引數 t,可以編寫其他客戶端 能夠使用的單個...