名字查找
- 当我们使用一个名字时,编译器就会向上查找名字的声明语句.变量名的查找和函数名的查找结果有一定区别.
- 变量名查找:最终仅会确定唯一的对象,从内到外碰到的第一个名字将被使用.
- 函数名查找:会先确定搜索域,然后按重载规则选择最有匹配. 搜索域包含一般scope和参数scope.
- 常规搜索域确定:从当前作用域开始,逐层向上查找名字声明,名字首次出现的作用域就是常规搜索域
- 对于函数调用的每个实参
arg_i
,其类型decltype(arg_i)
及其所有基类所在的作用域都加入实参类型搜索域 - 函数名和变量名都是名字,彼此可以相互hide.