最佳答案
Clang 在编译以下代码时发出警告:
struct Base
{
virtual void * get(char* e);
// virtual void * get(char* e, int index);
};
struct Derived: public Base {
virtual void * get(char* e, int index);
};
警告是:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
(当然需要启用上述警告)。
我不明白为什么。注意,在 Base 中取消注释相同的声明会关闭警告。我的理解是,由于这两个 get ()函数具有不同的签名,因此不可能有隐藏。
叮当是正确的吗? 为什么?
注意,这是在 MacOSX 上运行的 Xcode 的最新版本。
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
更新: Xcode 4.6.3的相同行为。