怎麼多了乙個typename?

2021-07-26 18:37:12 字數 608 閱讀 1619

請看乙個例子:

template

t>

class

example

;

哎,這裡怎麼多了乙個typename

問:不要行嗎?

答曰:不行。

問:為何?

答曰:因為t::iterator有三種可能:

1. t型別有乙個靜態資料成員,其變數名為iterator;

2. t型別有乙個靜態成員函式,其函式名為iterator;

3. t型別裡有乙個巢狀型別,名為iterator。

編譯器需要的是確定性!這麼多可能,叫編譯器怎麼選擇呢?

所以就有了那個typename的存在,來明確地告訴編譯器,這是第3種情況。

那麼問題來了,編譯器怎麼分清楚1和2?

在例項化模板的時候,編譯器自然可以很容易檢查t型別到底是符合1的情況,還是2的情況(注意,1、2、3這三種情況的任意兩種都是不可能同時發生的,因為類對成員的名字有限制),乙個簡單的if…else就可以搞定啦~

更詳細的講述,有興趣請看這篇文章:

typename 乙個用法

template struct myiter typedef t value type 巢狀型別宣告 nested type t ptr myiter t p 0 ptr p t operator const template typename i value type 這 整行是 func 的回返...

檔案頭多了乙個 ufeff字元

在學習python從檔案中讀取檔案,並將檔案中的字串轉化為列表的時候,發現檔案頭多了乙個 ufeff字元。這個問題前段時間也遇到過了,同樣是上網搜尋了半天才解決,當時只是把問題解決就過去了,但是今天遇到同樣的問題時,知道有這麼乙個解決方法,但是怎麼做就是想不起來。古人云,好記性不如爛筆頭,一點沒錯。...

2019 我的世界多了乙個 Python

大一時學過 c語言,大三時用 c 控制微控制器,之後就沒有別的和程式設計的交集了。大約十天前下定決心學 python,不開玩笑,版本我選 3。其實我也不是 100 的零基礎,因為一方面,我學過 c 另一方面,我以前看過一些公開課,比如 mit 的 程式設計導論 bit 的 python 語言程式設計...