在对象中使用或不使用“this”

时间:2014-06-27 14:21:10

标签: c++ methods this member

我的问题是指我想要调用同一类的其他方法的情况。使用和不使用'this'这样做的区别在哪里?与类的变量相同。通过'this'访问这些变量有区别吗?它与这些方法/变量是私有/公共有关吗?例如:

class A {
private:
    int i;
    void print_i () { cout << i << endl; }

public:
    void do_something () {

        this->print_i();    //call with 'this', or ...
        print_i();          //... call without 'this'

        this->i = 5;        //same with setting the member;
        i = 5;
    }
};

2 个答案:

答案 0 :(得分:1)

根本没有功能的区别。但有时您需要明确地将this作为提示添加到编译器中;例如,如果函数名称本身不明确:

class C
{
   void f() {}

   void g()
   {
      int f = 3;
      this->f(); // "this" is needed here to disambiguate
   }
};

James Kanze's answer还解释了显式使用this更改编译器选择的重载名称版本的情况。

答案 1 :(得分:1)

一般来说,这是一个风格问题。我所有的地方 工作时首选不使用this->,除非 必要的。

有些情况会有所不同:

int func();

template <typename Base>
class Derived : public Base
{
    int f1() const
    {
        return func();      //  calls the global func, above.
    }
    int f2() const
    {
        return this->func();  //  calls a member function of Base
    }
};

在这种情况下,this->使函数的名称依赖, 这反过来又推迟了模板的绑定 实例化。没有this->,函数名称将是 在定义模板时绑定,而不考虑什么 可能在Base中(因为模板的时候不知道 定义)。