[英]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.