C 11新特性(5) 型別別名

2021-08-18 05:40:22 字數 1284 閱讀 2341

為什麼需要別名

下面的說明只是乙個例子,實際的使用場景一定不止這些。

假設有乙個二維圖形計算的程式,定義了乙個point結構體。

struct

point

;在有些系統中,int型別的精度,範圍都足夠,在其他的系統中可能就不能滿足需求,可能需要擴大字長,或者需要提高精度等等。

方法有多種,其中之一就是定義別名。在c++11中定義別名的方法如下:

using

dtype

=int;

它的含義是為int指定乙個別名,dtype。指定別名以後,point結構體變成下面這樣:

struct

point

;這樣一來,只要改變dtype所對應的資料型別,所有使用point的**都會適應這種變化。

下面說明另一種場景。繼續假設這個程式中也會用到vector:

vector

v=,};

vector

::iterator

it=v.begin();

while(it!=v.end())

如果類似**多次出現,每次輸入相同的內容,有些人就會覺得麻煩。這時可以為vector定義乙個別名:

using

pointvector

=vector

;//定義別名

pointvector

va=,};

pointvector::iterator

ita=va.begin();

while(ita!=va.end())

定義別名,提供了另一種看程式的方式。

型別別名和typedef有什麼區別?

typedef也能提相同的功能,但是形式略有不同。

typedef int dtype;    //等價於using dtype = int;

typedef vectorpointvector; //等價於using point

typedef void(*ptof)(int); //等價於using ptof=void(*)(int);

c++11的別名定義方式似乎更容易理解一些。除此以外區別似乎不大,就看你怎麼選了。

關注【物件導向思考】,輕鬆學習每一天!

以上就是今天的文章,歡迎點讚並推薦給您的朋友!

C 11 新特性 模板別名

豆子 2012年5月22日 c 參考文章 2002 年,iso c 標準化組織就已經提出了模板別名的概念。不過那時候還是叫做 typedef template。在接下來的幾年中,以 gabriel dos reis 和 bjarne stroustrup 為代表的開發者發展了這個想法,最終,我們在 ...

C 11新特性之模板改進 別名

include using namespace std template typename t class foo foo private t foo template typename u classa a private u a intmain 如上示例 1 在c 98 03標準中,巢狀模板的右...

C 11新特性之POD型別

pod plain old data 是c 中非常重要的乙個概念,用來描述乙個型別的屬性其中plain表示這個型別是個平凡的型別,old表示其與c的相容性。c 11中將pod劃分為兩個基本概念 平凡的 trival 和標準布局 standardlayout 什麼是平凡性呢?通常乙個平凡的類或者結構體...