簡體   English   中英

c++ using 語句在 function 中,后跟 function 名稱(用於 ADL?)

[英]The c++ using statement within a function, followed by a function name (for ADL?)

什么是復制和交換成語? 在這個問題中,在最佳答案中,在實現交換公共朋友重載的部分中,實現使用了這個:

friend void swap(dumb_array& first, dumb_array& second){
    //the line of code below
    using std::swap;
    //then it calls the std::swap function on data members of the dumb_array`s
}

我的問題如下:這里using std::swap是什么(答案提到了與啟用 ADL 相關的內容); 這里專門調用了“使用”的什么用例,添加該行代碼的效果是什么,以及不在代碼上添加它的效果是什么?

using 語句使這條線工作:

swap(first, second);

請注意,我們可以在swap前面省略std::

重要的是std::swap(...)合格的查找,但swap(...)不合格的查找 主要區別在於合格查找在特定命名空間或 scope(指定的)中調用 function,而不合格查找更靈活一些,因為它將查找父 Z31A1FD140BE4BEF2D11E121EC9A1 的命名空間和全局命名空間。 此外,不合格的查找還將查找 arguments 類型的 scope。 這是一個不錯的工具,但也很危險,因為它可以從意想不到的地方調用 function。

ADL 僅適用於非限定查找,因為它必須搜索其他名稱空間和范圍。

using std::swap還確保如果通過 ADL 沒有找到 function,它將默認調用std::swap

這個習慣用法允許用戶定義交換函數:

struct MyType {
    // Function found only through ADL
    friend void swap(MyType& l, MyType& r) {
        // ...
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM