最有可能的一個不希望這個樣本編譯:「靜態成員函數將覆蓋基類的虛擬功能」通過gcc和鏗鏘而陷入沒有VC++
#include <iostream>
class C {
public:
virtual void Foo() {
std::cout << "From C\n";
}
};
class D : public C {
public:
static void Foo() {
std::cout << "From D\n";
}
};
int main() {
D d;
d.Foo();
return 0;
}
它不會在GCC的確編譯clang(錯誤「靜態成員函數覆蓋基類中的虛函數」)。但是,它確實在Visual C++中編譯,發出從D到運行控制檯。即使使用帶有選項ISO C++最新草案標準(/ std:C++ latest)的最新VC++ RC 2017編譯器(v141)和/permissive-(link)開啓。
哪個編譯器是正確的?這是標準的錯誤嗎?如果是這樣,這是否意味着VC++在這種情況下不遵循標準?
我相當確定這是違法的。最有可能是一個MSVC錯誤。此外,編譯器版本通常是MSVC14.1或更具體的19.10.24930在我的安裝。 – tambre