【发布时间】:2020-12-26 18:32:45
【问题描述】:
我发现了一些关于我上述问题的陈述,但有不同的说法:
-
静态成员函数不能访问类的非静态数据成员/函数。 vPTR 是非静态数据成员,因此静态成员函数无法访问 vPTR。
-
不,因为它在 C++ 中没有任何意义。
当你有一个类实例的指针/引用时,就会调用虚拟函数。静态函数不绑定到特定实例,它们绑定到类。 C++ 没有指向类的指针,因此没有可以虚拟调用静态函数的场景。
哪一个是正确的,出于什么原因?
【问题讨论】:
-
虚拟静态函数没有意义。虚函数用于为特定对象选择正确的实现。而且静态函数不是基于对象,而是基于类。
-
还有为什么静态成员函数不能声明为 const, volatile, 或 const volatile.??
-
@user253751 虽然好看也挺好看的。
-
静态函数不能是
const,原因与virtual相同——它只对在对象上调用的函数有意义。const应用于成员函数使得this指针const,而静态成员函数没有任何this指针。 -
实际上,我过去已经在 OOP 中看到过类函数(可以与
static virtual函数相媲美)。这是一个用 C 编写的 OOP API。但是,语言不支持这样的功能,但它可能通过函数指针和/或编译时多态(又名模板)以某种方式实现。