【发布时间】:2014-04-21 21:16:17
【问题描述】:
我一直在寻找一个我认为相当简单的问题的答案:为什么不推荐使用访问声明?
class A
{
public:
int testInt;
}
class B: public A
{
private:
A::testInt;
}
我知道它可以通过简单地在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-declarations - end footnote]
但是,除了确认我已经知道的内容之外,这实际上没有任何作用。如果您真的归结为,我确信我的问题源于我认为 using 和 SRO 可以互换的事实,但我没有看到任何其他建议。
提前致谢!
【问题讨论】:
-
deprecated究竟是哪个标准版本? c++11?这可能与您的问题非常相关... -
这就是我的顽皮表现的地方。回答你的问题:我不确定。我已经看到到处都张贴了那个块引用,所以我只是假设它是普遍正确的,并且随后会适用于我。 stackoverflow.com/questions/2084801/… - 一个例子,如果有帮助的话。我一直在研究 Alex Alllain 的“Jumping into C++”并使用 learncpp.com。除此之外,我知道的不多。我希望这不会让我的问题过于模糊。
-
我用c++已经很久了,我什至不知道你可以从派生类中改变基类成员的访问级别。
-
@πάνταῥεῖ:有趣的是,第一个 C++ 标准 C++98 中已经弃用了访问声明。
-
@JonathanWakely,除非你永远不应该修复代码。
标签: c++ deprecated language-lawyer