gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:02 24 4
gpt4 key购买 nike

我一直在查看一些示例代码,这些代码同时使用 this->functionname()classname::functionname() 来调用同一类中的函数。

这两种方法真的有区别吗?

此外,这些方法与使用 functionname() 简单地调用函数之间有区别吗?

谢谢。

最佳答案

像往常一样,在 C++ 中,事情没有您想象的那么简单。

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

  1. 只需调用函数:foo();
  2. this调用:this->foo();
  3. 使用类名:classname::f();

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

#3 是否与#1 和#2 不同取决于调用的函数是否为虚函数。如果它是非虚拟的,则没有区别。如果它 virtual 并且有这个函数的更多派生覆盖,那么#1 和#2 将调用派生函数,#3 将调用此类中存在的覆盖(或者如果此类中没有重写,则为最接近的父类(super class))。

上一段的异常(exception)情况是调用点位于构造函数或析构函数中。在这种情况下,即使函数是虚函数,#1 和#2 的行为也与#3 相同(在此类或最接近的父类(super class)中调用重写)。

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

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

我错过的事情:

  • this 如果函数被调用函数内部重新声明的全局隐藏,则可能需要此函数。参见 @Dutow's answer .
  • this 在处理 two phase lookup 时很有用(当涉及模板时)。感谢@Alejandro征求意见。
  • 我猜测使用 using 可能会在水中抛出更多泥浆,但我现在懒得去研究它(买者自负)。

的确,不是大家想象的那么简单......

关于c++ - 我什么时候应该使用 this->functionname() 而不是 classname::functionname() 来调用成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38563548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com