我的问题是指我想要调用同一类的其他方法的情况。使用和不使用'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;
}
};
答案 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
中(因为模板的时候不知道
定义)。