時(shí)常看到這樣的代碼,比如以下這兩段代碼:
list<int>::iterator?iter1;
list<T>::iterator?iter1;前者沒有問題可以順利的編譯過去,但是后者時(shí)常會報(bào)一個(gè)警告,為什么呢?
原因如下:
首先,list<T>是一個(gè)模板類,在模板實(shí)例化以前是無法確定起真正的類型的,也就是說編譯階段是無法知道到底是哪個(gè)類的,那么可能出現(xiàn)以下一種情況:某個(gè)類中恰好有一個(gè)靜態(tài)成員為iterator,此時(shí)就會出錯了。
因此為了明確的指出這是一個(gè)類型而不是一個(gè)成員,我們需要在前面加上typename,也就是:
typename?list<T>::iterator?iter1;typename在這里用于說明后面緊跟著的字符串表示的是一個(gè)類型。