[英]Why should I use typedefs in C++?
讓我們說:
set<int, less<int> > m_intset;
這可行,但現在我將其更改為typedef
,我最終得到兩行代碼:
typedef set<int, less<int> > SetInt;
SetInt m_intset;
這種typedef
什么優勢? 我正確使用它嗎?
使用typedef的一些優點:
簡化 :現在,每次你通常需要set<int, less<int> >
,你只需要輸入SetInt
。 如果你只使用一次這個集合沒什么大不了的,但是如果你有同一個集合的多個實例,或者需要訪問它的迭代器,那么更短的形式更容易閱讀和輸入。
澄清 : set<int, less<int> >
不會告訴我關於變量用途的任何信息,只是它是一組int。 使用typedef ,您可以選擇一個解釋該類型用途的標識符,例如Inventory
或Coordinates
。
抽象 :程序改變。 雖然您可能認為現在需要一個set<int, less<int> >
,但是您的需求總是有可能在將來發生變化,需要set<unsigned long, less<unsigned long> >
或vector<int>
或者其他一些變化。 通過使用typedef ,您只需要在一個地方修復它,它將影響程序中SetInt
每個實例。 與手動更改源文件中的十幾個或更多條目相比,這更容易並且更不容易出錯。
由於上面的第2點和第3點,當在類或庫中使用時, typedef可以非常強大,因為它可以加強接口和實現之間的分離,這通常被認為是良好的C ++形式。
當然,如果你在同一個程序中多次使用相同的類型,這些優點中的大多數只會真正顯示出來。 如果你只希望使用set<int, less<int> >
一次,那么typedef可能有點過分。
Typedef主要是符號方便,但它們確實有很多好處:
我敢肯定還有更多我沒想到......
你有完全正確的。 使用typedef可以更容易地使用SetInt::iterator
類的東西。
好處是多次引用相同類型時。 例如,如果要迭代您的集合; 相比:
for (set<int, less<int> >::iterator i = xs.begin(); i != xs.end(); ++i)
有:
for (IntSet::iterator i = xs.begin(); i != xs.end(); ++i)
如果你嵌套模板參數(例如,所不同變得更加明顯set
的pair
的vector
的string
)。
您正在為要在特定上下文中使用的類型創建別名。 這個例子怎么樣:
typedef int INT32
這一切都很好,如果你只編譯了int是32位數量的環境,你甚至不需要它。 但是,也許在將來的某一天,您將代碼移植到本機int為64位的系統中。 現在你的代碼可能會有一些錯誤,如果它假定int的32位大小在任何地方使用它們。 使用typedef,您只需要更改參數:
typedef /*some 32 bit type*/ INT32
請注意,這只是一個例子。 如果將來可能發生變化或清除代碼,那么這個想法就會抽象出類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.