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