如果您编译下面的代码失败,则说B类无法访问,因为它被用作成员函数func的参数.为什么是这样?
注意:如果D2不从D1继承,则错误消失,因此从D2继承使B无法访问.
namespace myns {
class B {};
}
using namespace myns;
class D1 : B {};
class D2 : D1 {
void func(B b) {}
};
Run Code Online (Sandbox Code Playgroud)
名称查找查找D2::D1::B,而不是myns::B.在名称查找之后,执行访问检查,并发现它D2::D1::B是私有的.
命名空间是一个红色的鲱鱼:如果B在全局命名空间中定义,则会观察到完全相同的结果.