C++中的静态函数可以是虚函数吗?

Mee*_*ena 4 c++ static

我发现了一些关于我的上述问题的陈述,但有不同的说法:

  1. 静态成员函数无法访问类的非静态数据成员/函数。vPTR 是非静态数据成员,因此静态成员函数无法访问 vPTR。

  2. 不,因为它在 C++ 中没有任何意义。

    当您有一个类实例的指针/引用时,就会调用虚函数。静态函数不绑定到特定实例,而是绑定到类。C++ 没有类指针,因此不存在可以虚拟调用静态函数的场景。

哪一个是正确的,原因是什么?

Bat*_*eba 5

不可以,静态函数在 C++ 中不能是虚函数。

如果函数不依赖于类的任何成员,但在某种意义上依赖于类型,它有时会很有用:

struct Animal
{
    static virtual std::string whatNoiseDoIMake() = 0;
};

struct Dog : Animal
{
    static std::string whatNoiseDoIMake()
    {
        return "woof"s;
    }
};
Run Code Online (Sandbox Code Playgroud)

它不是该语言的一部分的原因是它没有被 C++ 标准委员会提议和接受。我的示例可以使用类型特征来解决,这削弱了允许此类构造的情况。

至于const,这实际上是关于修改非类成员的可能性mutable。编写一个有意义的成员函数示例比较困难const static。也许它可以应用于static成员,但是::无论如何都可以通过丢弃(有趣的)访问说明符来访问这些成员。