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);
};
Run Code Online (Sandbox Code Playgroud)
警告是:
warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]
Run Code Online (Sandbox Code Playgroud)
(当然需要启用上述警告).
我不明白为什么.请注意,在Base中取消注释相同的声明会关闭警告.我的理解是,由于两个get()函数具有不同的签名,因此不能隐藏.
clang对吗?为什么?
请注意,这是在MacOS X上,运行最新版本的Xcode.
clang --version
Apple LLVM version 5.0 (clang-500.1.74) (based on LLVM 3.3svn)
Run Code Online (Sandbox Code Playgroud)
更新:与Xcode 4.6.3相同的行为.
这段代码:
Int32 status;
printf("status : %x", status)
Run Code Online (Sandbox Code Playgroud)
给我以下警告:
jpegthread.c:157: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'Int32'
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过转换类型来摆脱它,但是有可能使用GCC编译器标志来摆脱那种特殊类型的警告,并仍然使用-Wall?