我什么时候应该使用this-> functionname()over classname :: functionname()来调用成员函数?

row*_*lip 5 c++ oop namespaces this

我一直在查看一些使用两者的示例代码,this->functionname()classname::functionname()在同一个类中调用函数.

这两种方法实际上有区别吗?

另外,这些方法之间是否有区别,只是简单地调用函数functionname()

谢谢.

Mot*_*tti 4

与 C++ 中通常的情况一样,事情没有您想象的那么简单。

调用成员函数的方法有3种。

  1. 只需调用该函数:foo();
  2. 致电thisthis->foo();
  3. 使用类的名称:classname::f();

数字#1和#2是等价的,有些人更喜欢#2,因为更清楚这是一个成员函数而不是全局函数(这些人只是少数)。

#3 与#1 和#2 是否不同取决于调用的函数是否为虚函数。如果它是非虚拟的,则没有区别。如果它虚拟的,并且该函数有更多派生重写,则 #1 和 #2 将调用派生函数,而 #3 将调用此类中存在的重写(或者如果此类中没有重写,则最接近的超级函数) -班级)。

上一段的例外情况是调用点位于构造函数或析构函数中时。在这种情况下,即使函数是虚拟的#1,#2 的行为也会与#3 相同(在此调用重写,或最接近的超类)。

另外,如果函数是static,则#2 无效,从类内部调用时#1 和#3 等效,但从类外部调用时需要#3。

我希望我没有错过任何东西:)

我错过的事情:

  • this如果函数被调用函数内部重新声明的全局隐藏,则可能需要。请参阅@Dutow 的回答
  • this在处理两阶段查找时(涉及模板时)非常有用。感谢@Alejandro的评论。
  • 我猜使用using可能会在水中扔更多的泥巴,但我现在懒得去研究它(买者自负)。

确实,事情并不像人们想象的那么简单……