假设您有以下代码:
如果在命名空间a中定义了
为什么呢?
namespace a{
struct S{};
//void f(int){}
}
namespace b{
struct T{};
}
struct X{};
void f(X){}
void f(b::T){}
void f(a::S){}
namespace a{
void g(){
S s;b::T t;
X x;
f(x);
f(s);
f(t);
}
}
int main(){
a::g();
}
如果在命名空间a中定义了
void f(int){}
(第3行没有被注释掉),那么它会遮盖后面的void f(b::T){}
和void f(a::S){}
的定义,但不包括void f(X){}
。为什么呢?
f
,并且在相同的命名空间中时,f(c)
使用f(int)
。 - Bo Persson