【发布时间】:2024-01-02 16:56:01
【问题描述】:
假设你有以下代码
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();
}
如果void f(int){} 定义在命名空间a 中(第3 行未注释),它会影响void f(b::T){} 和void f(a::S){} 的后续定义,但不会影响void f(X){}。
为什么?
【问题讨论】:
-
我认为它确实隐藏了外部
f,并且f(c)在同一个命名空间中使用f(int)。 -
同样的事情发生在 struct X instread of char
-
不,那是另一回事。如果参数和函数声明在同一个命名空间(包括全局命名空间)中,函数仍然可以找到。
-
@BoPersson 谢谢!!这正是重点!
-
@BoPersson:如果您将其写为答案,我会将其标记为明确的答案。实际上,命名空间 c{ struct Y{}; void f(Y){} } 和 f(y) 有效
标签: c++ namespaces method-hiding