一個typedef
的基本語法是:
"typedef" <name of type> <name of alias for type>
別名的名稱是一個單個標識符。在typedef
關鍵字和去年標識符之間的一切必須的名稱/類型爲您正在創建一個別名。當然,對於像指針和引用,特別是像一個別名爲pointer to a function returning int and taking a string and a long as parameters
,別名的名稱將是在聲明中間的某個地方掩埋,就像它會在/是如果你聲明一個變量這種類型的(事實上,語法,typedef
最初加入C作爲「存儲類」等auto
或register
,因此它在一個聲明作爲其中將之一佔據完全相同的點)。
因此,在typedef int value_type
它創建value_type
作爲int
的別名。
但是請注意,在這種情況下,value_type
嵌套在bag
之內,因此名稱的完整名稱是bag::value_type
。如果您使用其他容器,則每個容器可能都有一個value_type
。例如:
std::vector<unsigned> x;
在這種情況下,value_type
也將是unsigned
。對於像std::map
這樣的關聯容器,value_type
變得更有趣。例如,給定一個地圖,如:
std::map<std::string, int> foo;
...的value_type
將std::pair<const std::string, int>
。
像value_type
這些嵌套標識符用於尤其巨資模板代碼,可能需要不同類型的集裝箱(或迭代到這種容器中的內容),因此對於特定的容器中的value_type
當代碼被寫入是不知道。例如,如果你想所有項目加在一起在一個容器中,你可以使用容器的value_type
對結果的類型,所以當你添加一起vector<int>
,其結果將是一個int
,但如果你加在一起list<string>
,結果將是string
。
可能的重複[什麼是typedef的使用?](http://stackoverflow.com/questions/2566027/what-is-the-use-of-typedef) – Conner
也許重複的另一個職位,但不是。第二個陳述令人困惑。我沒有看到任何幫助。 – Beezly
你怎麼理解第一個typedef,但不是第二個?這是同一件事!或者你被'std ::'命名空間說明符弄糊塗了嗎? –