關於ADL的查詢順序

2021-07-02 23:56:04 字數 896 閱讀 8549

argument-dependent lookup或koening lookup法則

當我們給函式傳遞乙個類型別的物件時,首先會在常規的作用域查詢,其次在實參類所屬的命名空間查詢。

查詢順序如下:

1. 先在本作用域內查詢;

2. 在實參的命名空間 和 全域性作用域中 同時查詢;

這一規則也叫做argument-dependent lookup或koening lookup法則。這一規則對傳遞類的引用或指標的呼叫同樣有效。如果名稱後面的括號裡面有乙個或多個實參表示式,那麼adl將會查詢這些實參直接相關的所有namespace和class。其中,類包括直接基類和間接基類。andrew koenig首次提出了adl,這也是為什麼adl有時也稱為koenig查詢的原因。最初adl引入的動機只是為了方便編寫a+b,其中a和b至少有乙個是使用者自定義型別。如果沒有adl,則就要寫為n::operator+(a,b)。

下面我們用程式來驗證一下:

#include using std::cout;

using std::endl;

namespace x

}namespace n ;

void f(e)

}void f(n::e)

int main()

修改主函式**為:

int main()
輸出:

::f(n::e) is called!!!

::f(n::e) is called!!!

int main()
輸出:

::f(n::e) is called!!!

n::f(n::e) is called!!!

done!

Koenig查詢(ADL)簡析

adl,引數相關查詢,也稱作為koenig查詢 以andrew koenig的名字命名 是指在編譯器對無限定域的函式呼叫進行名字查詢時,所應用的一種查詢規則。f x,y,z unqualified n f x,y,z qualified 上面的函式呼叫,第乙個f就是無限定域的函式呼叫,第二個則限定了...

查詢 順序查詢

順序查詢的思路 從資料的第乙個元素開始,依次將掃瞄到的關鍵字和給定值key比較。若當前掃瞄到的關鍵字和key相等,則查詢成功 若掃瞄結束還沒有找到和key相等的元素,就表示查詢給定的值不在表中。時間複雜度 o n 優點 1.演算法簡單 2.對錶結構沒有任何要求,用順序表或者用鍊錶都可以。3.表中元素...

查詢 順序查詢

查詢 根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的記錄或資料元素。若表中存在這樣的乙個記錄,則稱查詢是成功的,此時查詢的結果為給出整個記錄的資訊,或指示該記錄在查詢表中的位置。若表中不存在關鍵字等於給定值的記錄,則稱查詢不成功,此時查詢的結果可給出乙個空記錄或者空指標。本篇文章討論在靜態...