【发布时间】:2016-12-01 10:37:01
【问题描述】:
我不小心用基结构派生的类中的私有成员隐藏了(基)结构的一些成员变量。
结构基{
一个;
}派生类:公共基础{
私人:
一个;
...
在我的情况下这是一个错误,导致了一个鬼鬼祟祟的错误(幸运的是在测试时发现)。
由于我认为故意遮蔽成员真的很少见(如果根本不认为是不好的做法),我想知道为什么编译器至少没有发出警告(好吧,不是错误,因为法律允许遮蔽)?
我使用的编译器是 Microsoft Visual C++ 2015,警告级别 4)。
我想知道其他编译器(即 GCC)是否针对这种情况提供了特定的警告?
【问题讨论】:
-
gcc 也没有提供警告,但有趣的是,这种行为应该如何与多态性一起工作
-
@VittorioRomeo 如果在编写
Derived时a中不存在Base,这不是错误。 -
@Raymond Chen,仅供参考,在我的情况下,Base 中已经存在 a。
-
@roalz:编译器不会知道导致它在编译代码时看到的情况的历史情况。有一些有效的情况,这是完全安全的。如果不知道这两个类的历史,编译器就无法发出警告。
标签: c++ visual-c++ compiler-warnings