zoukankan      html  css  js  c++  java
  • ADL法则(koenig lookup)

    argument dependent lookup(ADL)法则也叫koenig lookup法则。

    什么是ADL,我们先看一个有趣的例子:

    #include <iostream>
     
    using namespace std;
     
    namespace A
    {
    	struct X{};
    	void g(X)
    	{
    		cout << "A...
    ";
    	}
    }
     
    int main()
    {
    	A::X x;
    	A::g(x);
    }
    

     运行显示A...

    如果去掉main中的A::, 你以为编译一定会报错,函数g未定义

    然而并不会,结果仍显示A...

    这就是ADL也搞事情了,规则是这样的:当编译器在编译该函数时,不仅会在current scope 和global scope查找函数,并且会在形参声明的地方查找函数。

    因为形参x在命名空间A中声明的,于是编译器会在A中查找g,找到了!

    另外:

      1. ADL只对namespace起作用,把namespace A换成class A就会报错。

      2. 编译器查找是有优先顺序的,current scope > global scope > 使用ADL,一旦找到便停止。

  • 相关阅读:
    地区列表
    storyboard
    快捷键2
    关于本地缓存
    深入浅出Cocoa之消息
    ARC和Non-ARC下的单例模式
    runloop原理介绍
    ARC内存管理机制详解
    解决UITableViewCell separator左侧不贴边
    UICollectionView的使用
  • 原文地址:https://www.cnblogs.com/ice-arrow/p/13588516.html
Copyright © 2011-2022 走看看