為什么需要別名
下面的說明只是一個例子,實(shí)際的使用場景一定不止這些。
假設(shè)有一個二維圖形計算的程序,定義了一個point結(jié)構(gòu)體。
struct?point
{
???int?x;
???int?y;
};
在有些系統(tǒng)中,int類型的精度,范圍都足夠,在其他的系統(tǒng)中可能就不能滿足需求,可能需要擴(kuò)大字長,或者需要提高精度等等。
方法有多種,其中之一就是定義別名。在C++11中定義別名的方法如下:
using?dtype?=?int;
它的含義是為int指定一個別名,dtype。指定別名以后,point結(jié)構(gòu)體變成下面這樣:
struct?point
{
???dtype?x;
???dtype?y;
};
這樣一來,只要改變dtype所對應(yīng)的數(shù)據(jù)類型,所有使用point的代碼都會適應(yīng)這種變化。
下面說明另一種場景。繼續(xù)假設(shè)這個程序中也會用到vector:
vector
vector
?while(it?!=?v.end()){
? ? ???cout?<<?(*it).x?<<?","?<<?(*it).y?<<?endl;
? ? ???it++;
?}
如果類似代碼多次出現(xiàn),每次輸入相同的內(nèi)容,有些人就會覺得麻煩。這時可以為vector
using?PointVector?=?vector
PointVector?va?=?{{1,?2},?{3,?4}};
PointVector::iterator?ita?=?va.begin();
while(ita?!=?va.end()){
? ? ???cout?<<?(*ita).x?<<?","?<<?(*ita).y?<<?endl;
? ? ???ita++;
?}
定義別名,提供了另一種看程序的方式。
類型別名和typedef有什么區(qū)別?
typedef也能提相同的功能,但是形式略有不同。
typedef int dtype;??? //等價于using dtype = int;
typedef vector
typedef void(*PtoF)(int); //等價于using PtoF=void(*)(int);
C++11的別名定義方式似乎更容易理解一些。除此以外區(qū)別似乎不大,就看你怎么選了。