当前位置:  开发笔记 > 编程语言 > 正文

有没有理由使用这个 - >

如何解决《有没有理由使用这个->》经验,为你挑选了4个好方法。

我用C++编程多年,但我对一件事情仍有疑问.在其他人代码的许多地方,我看到类似的东西:

void Classx::memberfunction()
{
    this->doSomething();
}

如果我需要导入/使用该代码,我只需删除this-> part,我从未见过任何破坏或有一些副作用.

void Classx::memberfunction()
{
    doSomething();
}

那么,你知道使用这种结构的任何理由吗?

编辑:请注意我在这里谈论成员函数,而不是变量.我知道当你想要区分成员变量和函数参数时,可以使用它.

编辑:明显重复: 有没有理由不使用"这个"("自我","我",......)?



1> sth..:

它真正有所作为的唯一地方是派生类中的模板:

template
class A {
protected:
  T x;
};

template
class B : A {
public:
  T get() {
    return this->x;
  }
};

由于C++编译器中名称查找的细节,必须明确说明它x是类的(继承)成员,最容易完成this->x.但这是一个相当深奥的案例,如果你没有模板化的类层次结构,你真的不需要显式地使用它this来访问类的成员.



2> drby..:

如果同一范围内的另一个变量具有相同的名称,则this->将消除歧义.

void Bar::setFoo(int foo)
{
    this->foo = foo;
}

此外,它清楚地表明您正在引用成员变量/函数.


只是回答这个问题.

3> Andy Dent..:

如果存在可能使用与您的成员函数同名的宏定义并且您不确定它是否已被可靠地定义,则可以保证触发编译器错误.

不开玩笑,我很确定我必须这样做才是出于这个原因!


如果应用于函数,它具有保证调用可能虚函数的哪个版本的效果,防止多态并且通常用于调用覆盖函数的父函数.它不是这个 - > doSomething()的安全等价物.
似乎没有人提到另一种解析成员名称的方法是使用http://en.wikipedia.org/wiki/Scope_resolution_operator.例如Classx :: doSomething();

4> peterchen..:

作为“代码原因”,要从成员中区分局部参数或值(优先级):

class Foo
{
    int member;
    void SetMember(int member)
    {
       this->member = member;
    }
}

但是,这种做法一开始就不好用,通常可以在本地解决。

第二个原因是更多的“环境”:有时它可以帮助Intellisense过滤我真正想要的东西。但是,当我使用它来查找我要寻找的成员时,我也很重要,也应该删除它。

所以是的,有充分的理由,但是它们都是暂时的(从长远来看,这是不好的)。


我不同意这一定是一个坏习惯。如果您对一个对象或变量有一个好的,清楚的,含糊的名称...为什么要更改它?
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有