我发现了一些关于我的上述问题的陈述,但有不同的说法:
静态成员函数无法访问类的非静态数据成员/函数。vPTR 是非静态数据成员,因此静态成员函数无法访问 vPTR。
不,因为它在 C++ 中没有任何意义。
当您有一个类实例的指针/引用时,就会调用虚函数。静态函数不绑定到特定实例,而是绑定到类。C++ 没有类指针,因此不存在可以虚拟调用静态函数的场景。
哪一个是正确的,原因是什么?
不可以,静态函数在 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成员,但是::无论如何都可以通过丢弃(有趣的)访问说明符来访问这些成员。