c++作用域和ADL(argument dependent Lookup)

c++ 如何在多个命名空间中查找函数的

  • 在main函数中调用的函数名查找 ---------(local = global +函数的参数类所在的命名空间(ADL))

  • 在多重命名空间中的函数中调用的函数,函数名查找 -------- (local = 当前作用域 + 函数的参数类所在的命名空间(ADL) ADL中存在还是会向上找)->函数所在命名空间 ->命名空间所在命名空间 ---一直到找到为止

找到了函数后,实行最佳匹配原则

附代码

#include "src/provide.h"
#include <stdio.h>
#include <cstring>
#include <unistd.h>

#include <iostream>
#include <sstream>
#include <vector>
#include <map>
#include <memory>

using namespace std;
 
 void namea(fzy::Base::ptr a, double y) {
     std::cout << "global" << std::endl;
 };

 namespace le {
    //  void namea(fzy::Base::ptr a, double y) {
    //   std::cout <<"le" <<  y+2 << std::endl;
    //  }

     namespace p {
        //  void namea(fzy::Base::ptr c, int y,int d = 0) {
        //   std::cout << "p" << std::endl;
        //  }

         namespace th {
             void invoke() {
                 int y = 0;
                 fzy::Derive::ptr  p (new fzy::Derive());
                 namea(p,y);
             }
         }
     }
 }

int main ()
{
    // fzy::Derive::ptr p(new fzy::Derive());
    // fzy::namea(p,2,3);
        le::p::th::invoke();
}


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容