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