我用C++编程多年,但我对一件事情仍有疑问.在其他人代码的许多地方,我看到类似的东西:
void Classx::memberfunction() { this->doSomething(); }
如果我需要导入/使用该代码,我只需删除this-> part,我从未见过任何破坏或有一些副作用.
void Classx::memberfunction() { doSomething(); }
那么,你知道使用这种结构的任何理由吗?
编辑:请注意我在这里谈论成员函数,而不是变量.我知道当你想要区分成员变量和函数参数时,可以使用它.
编辑:明显重复: 有没有理由不使用"这个"("自我","我",......)?
它真正有所作为的唯一地方是派生类中的模板:
templateclass A { protected: T x; }; template class B : A { public: T get() { return this->x; } };
由于C++编译器中名称查找的细节,必须明确说明它x
是类的(继承)成员,最容易完成this->x
.但这是一个相当深奥的案例,如果你没有模板化的类层次结构,你真的不需要显式地使用它this
来访问类的成员.
如果同一范围内的另一个变量具有相同的名称,则this->将消除歧义.
void Bar::setFoo(int foo) { this->foo = foo; }
此外,它清楚地表明您正在引用成员变量/函数.
如果存在可能使用与您的成员函数同名的宏定义并且您不确定它是否已被可靠地定义,则可以保证触发编译器错误.
不开玩笑,我很确定我必须这样做才是出于这个原因!
作为“代码原因”,要从成员中区分局部参数或值(优先级):
class Foo { int member; void SetMember(int member) { this->member = member; } }
但是,这种做法一开始就不好用,通常可以在本地解决。
第二个原因是更多的“环境”:有时它可以帮助Intellisense过滤我真正想要的东西。但是,当我使用它来查找我要寻找的成员时,我也很重要,也应该删除它。
所以是的,有充分的理由,但是它们都是暂时的(从长远来看,这是不好的)。