名稱的分類:
標示符 identifier:一個只有字元、數字和底線組成的不間斷字元序列
運算id operator-function id:運算子,例如*、%、+\-,
強制轉換id conversation-function id:static_cast、dynamic_cast之類
模板id template id:模板名稱
非受限id unqualified-id:廣義化的標示符 identifier,
受限id qualified-id:用一個類名或者名字空間名稱對一個unqualified-id進行限定
受限名稱 qualified name:
非受限名稱 unqualified name:
依賴型名稱 dependent name:依賴於模板參數
非依賴型名稱 undependent name:不依賴於模板參數
名稱尋找:
受限名稱:在受限範圍內尋找就好
非受限名稱:在調用點可見的和ADL argument-dependent lookup
ADL:
在函數調用過程中 如果普通尋找就能找到函數的名字,那麼就不會應用ADL。如果把被調用函
數的名稱用圓括弧()括起來,例如(max),也不會調用ADL。否則,如果名稱後面的括弧裡面有一個
或多個實參運算式,那麼這些實參的associated class和associated namespace。
對於給定類型,對於associated class和associated namespace所組成集合的準確定義,我們
可以通過下列規則來確定:
1.對於基本類型,該集合為空白
2.對於指標和參考型別,該集合是指標所指向的類和引用鎖引用的類型的associated class和associated namespace
3.對於枚舉類型,associated namespace就是其所在的namespace;對於類成員,起associtated
class指的是它所在的類。
4.對於class類型(包括等位型別),associated class集合包括:該class本身、它的外圍類型、
它的直接和間接基類。associated namespace集合是每個associated class所在的namespace。如
果這個類是類模板執行個體化產生的,那麼還包括:模板類型實參本身的類型、聲明模板的模板實參所
在的class和namespace
5.對於函數類型,該集合包括所有參數類型和傳回型別的associated class和associated
namespace
6.對於類X的成員指標類型,除了包括成員相關的associated class和associated namespace之外
,該集合還包括與X相關的associated class和associated namespace;