row*_*lip 5 c++ oop namespaces this
我一直在查看一些使用两者的示例代码,this->functionname()并classname::functionname()在同一个类中调用函数.
这两种方法实际上有区别吗?
另外,这些方法之间是否有区别,只是简单地调用函数functionname()?
谢谢.
与 C++ 中通常的情况一样,事情没有您想象的那么简单。
调用成员函数的方法有3种。
foo();this:this->foo();classname::f();数字#1和#2是等价的,有些人更喜欢#2,因为更清楚这是一个成员函数而不是全局函数(这些人只是少数)。
#3 与#1 和#2 是否不同取决于调用的函数是否为虚函数。如果它是非虚拟的,则没有区别。如果它是虚拟的,并且该函数有更多派生重写,则 #1 和 #2 将调用派生函数,而 #3 将调用此类中存在的重写(或者如果此类中没有重写,则最接近的超级函数) -班级)。
上一段的例外情况是调用点位于构造函数或析构函数中时。在这种情况下,即使函数是虚拟的#1,#2 的行为也会与#3 相同(在此调用重写,或最接近的超类)。
另外,如果函数是static,则#2 无效,从类内部调用时#1 和#3 等效,但从类外部调用时需要#3。
我希望我没有错过任何东西:)
我错过的事情:
this如果函数被调用函数内部重新声明的全局隐藏,则可能需要。请参阅@Dutow 的回答。this在处理两阶段查找时(涉及模板时)非常有用。感谢@Alejandro的评论。using可能会在水中扔更多的泥巴,但我现在懒得去研究它(买者自负)。确实,事情并不像人们想象的那么简单……