假设我们有这段代码,是从一个单独的问题复制的:
namespace x
{
void f()
{
}
class C
{
void f()
{
using x::f;
f(); // <==
}
};
}
名字f
在指定的行上明确指的是x::f
(至少根据 gcc 和 clang )。为什么是x::f
优先于x::C::f
在这种情况下?因为两个名字都可见,所以不应该有歧义吗?
因为using
宣言带来x::f
纳入范围f
,它比C
。非限定查找考虑本地块作用域,找到匹配项,并在考虑更广泛的类作用域之前停止。由于没有函数参数,因此不存在依赖于参数的查找,因此不考虑进一步的作用域。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)