区分C++静态方法是由类还是由对象调用

Wes*_*ler 2 c++ static class function

有没有办法判断类的静态方法是通过调用类方法还是通过来自对象的调用来调用的?

class mertz
{
   static int x(void) {....}
   ....
}

int main( ... )
{
   int c = mertz::x();
   mertz     fred;  
   ind d = fred.x();
}
Run Code Online (Sandbox Code Playgroud)

x可以告诉c和d的调用区别吗?

谢谢.

tem*_*def 6

不,没有办法分辨出来.这两个电话是相同的.

出于好奇,你有没有理由这样做?

希望这可以帮助!


650*_*502 5

不是以可移植的方式,在大多数C++实现中可能根本不存在.

静态方法确实只是一个有趣名称的全局函数.理论上,您可以检查调用堆栈以查找调用来自何处...但是,编译器生成的机器指令很可能对于两者都是相同的

mertx::x();
Run Code Online (Sandbox Code Playgroud)

fred.x();
Run Code Online (Sandbox Code Playgroud)

因为只需要实例的静态类型来查找哪个是要调用的方法,并且此信息在编译时可用.因此,在这两种情况下,调用代码只调用函数而无需引用fred实例.