為什麼需要別名
下面的說明只是乙個例子,實際的使用場景一定不止這些。
假設有乙個二維圖形計算的程式,定義了乙個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 什麼是平凡性呢?通常乙個平凡的類或者結構體...