CPP Templates 之 名稱分類和名稱尋找

來源:互聯網
上載者:User
名稱的分類:

標示符 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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.