gpt4 book ai didi

c++ - "Static member function overrides a virtual function in a base class"被 gcc 和 clang 捕获但不是 VC++

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:20 25 4
gpt4 key购买 nike

很可能有人不希望此示例编译:

#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++ 中编译,在运行时发出 From D 到控制台。即使使用带有选项 ISO C++ 最新草案标准 (/std:c++latest)/permissive- (link) 的最新 VC++ RC 2017 编译器 (v141)开启。

哪个编译器是正确的?这是标准错误吗?如果是这样,是否意味着 VC++ 在这种情况下不遵循标准?

最佳答案

这绝对是一个 MSVC 错误。 ISO C++ 不允许这样做。

class.static.mfct/2 (强调我的):

[ Note: A static member function does not have a this pointer.  — end note ] A static member function shall not be virtual. There shall not be a static and a non-static member function with the same name and the same parameter types ([over.load])...

关于c++ - "Static member function overrides a virtual function in a base class"被 gcc 和 clang 捕获但不是 VC++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42332147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com