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

时间:2012-06-08 16:07:57

标签: c++ class function static

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

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

int main( ... )
{
   int c = mertz::x();
   mertz     fred;  
   ind d = fred.x();
}

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

感谢。

3 个答案:

答案 0 :(得分:6)

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

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

希望这有帮助!

答案 1 :(得分:5)

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

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

mertx::x();

fred.x();

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

答案 2 :(得分:0)

你可以拥有同名的静态和非静态函数

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

否则,正如已经指出的那样,x没有机会告诉它是如何被调用的。