C++系列
[Cpp基础] [04] 名字查找与函数重载
名字查找 * 当我们使用一个名字时,编译器就会向上查找名字的声明语句.变量名的查找和函数名的查找结果有一定区别. * 变量名查找:最终仅会确定唯一的对象,从内到外碰到的第一个名字将被使用. * 函数名查找:会先确定搜索域,然后按重载规则选择最有匹配. 搜索域包含一般scope和参数scope. * 常规搜索域确定:从当前作用域开始,逐层向上查找名字声明,名字首次出现的作用域就是常规搜索域 * 对于函数调用的每个实参arg_i,其类型decltype(arg_i)及其所有基类所在的作用域都加入实参类型搜索域 * 函数名和变量名都是名字,彼此可以相互hide. 重载匹配规则 * 函数重载的基础是传入参数的类型,和返回类型无关.对于非引用的形参,const不作为重载的依据. * 首先根据实参类型排除不能产生调用的函数,得到一个可行函数列表. 在可行列表中: 类型转换越少越好,在此前提下, 特化的优先于一般的. * 注意: * 仅函数/数组向指针的转换是精确匹配,只要类型不同,都被视作类型转换,例如:派生类指针到基类指针,非