我一直在寻找一个我认为相当简单的问题的答案:为什么访问声明被弃用?
class A
{
public:
int testInt;
}
class B: public A
{
private:
A::testInt;
}
Run Code Online (Sandbox Code Playgroud)
我知道它可以通过简单地在前面加上“using”来修复A::testInt,但如果不了解为什么我必须这样做,这感觉就像一个廉价的修复。
更糟糕的是,它混淆了我对使用声明/指令和范围解析运算符的理解。如果我必须在此处使用 using 声明,为什么我可以在其他地方使用 SRO 而只能使用 SRO?一个简单的例子是std::cout。为什么不使用使用std::cout?我曾经认为 using 和 SRO 或多或少是可以互换的(提供或获取“using”关键字提供的一些方便的功能,我知道这一点,至少在命名空间的情况下)。
我在标准中看到了以下内容:
通过在派生类声明中提及 > 其限定 ID,可以在派生类中更改基类成员的访问权限。这种提及称为访问>声明。访问声明qualified-id的效果;被定义为等同于>使用qualified-id的声明;[脚注:不推荐使用访问声明;member >using-declarations (7.3.3) 提供了更好的方法来做同样的事情。在 C++ 语言的早期版本中,访问声明受到更多限制;它们被泛化>并等同于使用声明 - 结束脚注]
然而,这实际上只是证实了我已经知道的事情。如果你真的把它归结起来,我确信我的问题源于这样一个事实:我认为 using 和 SRO 是可以互换的,但我还没有看到任何其他建议。
提前致谢!