使用"this"对所有成员函数和属性进行不良实践?

pen*_*ope 25 c++ class

最近,我在这里贴一张我的代码,并得到了评论(无关原来的问题),其使用this类的所有成员函数和属性是"不是简单的个人编码风格的问题,这是不好的做法".不幸的是,这个人拒绝详细说明并告诉我自己查一下.

我用谷歌了一堆(但它真的很难找了什么"这个"作为关键字),并期待在这里,但我只找到一些 例子this ,必须使用.

我知道使用this不可避免的情况(参数/变量具有相同的名称,模板继承等),但随着时间的推移我开始使用,this因为我可以更轻松,更快地找到我的代码.我的理由包括:

  • 快速检查函数f是否应该是一个成员函数:如果this代码中没有,它可以从类中取出
  • 快速检查是否f可以是一个const功能:如果this左边没有,很可能是可以制作const(并不总是,但我觉得它在浏览时很有用)
  • 快速检查对象是否以"预定义"方式"更改"自身f,或者它是否为复合成员函数(使用this对象操作的成员方法与没有此操作的对象的"外部"算法)
  • 调试; 即如果成员属性在任何点被赋予错误的值,我必须专注于包含的行this来找到问题,因为其他行不会更改对象

坦率地说,关于这种"不良做法"的评论让我感到不安.但是,一个评论本身并不意味着什么,所以我想问一下,this对于所有成员函数和属性使用一致性是否有任何不妥之处?如果是这样,那么将它置于(可能是笨拙的,不受欢迎的或不普遍的)个人风格并将其置于"不良实践"类别中的主要缺点是什么?

utn*_*tim 24

这个答案是基于意见的(正如其他人所指出的).

我认为这是一种不好的做法,因为:

  • 它使代码变得更大,不必要(最容易维护的代码,是你不需要编写的代码,因为你没有必要).
  • 这是意料之外的(虽然可能会想到它,但其他人却不会 - 所以你的代码中的WTF/SLOC比率会增加)
  • 它增加了维护成本.
  • 它需要额外的努力来保持代码的一致性(很少或没有额外的好处).
  • 虽然它看起来是一致的,但它是多余的(类似于用语法声明所有对象实例class <class-name> var;,而不是<class-name> var;忽略"零规则").
  • 它创造了不适合大多数开发团队和编码标准的编码习惯.
  • 更好的做法是重命名变量和函数以避免名称冒号而不是使用它this->(因为用于类,函数和变量的名称构成了用于理解代码结构的心理模型).
  • 在不遵循/接受这种做法的代码库中工作几个月之后,您可能会发现自己的代码难以阅读/维护(换句话说,在一年左右的时间内,它可能会变得纯粹无趣).

  • 这是意想不到的,难以阅读,因为它非常罕见.我通常将这样的代码称为"心理速度碰撞". (4认同)
  • 如何"这个"意外或使代码难以阅读?即使你没有使用它的习惯,它的意义也很明显,不是吗? (2认同)

Joh*_*ing 7

没有任何技术原因导致无法在任何地方使用它.

如果您只对技术原因感兴趣,那就是您的答案.但是,我会恳请你考虑非技术原因.出于某种原因形成意见,其中一些原因可能是好的.例如,我建议在任何地方使用它会降低代码的可维护性,并且通过重新考虑命名方案可以更好地服务.

考虑通常this在需要的地方使用,而不是在其他地方使用.this正如你所说,有些理由可能需要,当大多数程序员遇到this他们时,他们会对自己感到疑惑,"这里必须要出于一个非显而易见的原因.我不知道这是什么原因."

一致性是可维护代码的重要属性.使用this无处不在的一个主要问题是它与大多数其他程序员的做法不一致.由于大多数其他程序员不会使用this无处不在,当你任何地方使用它,它会变得更加困难了他们维护你的代码.

  • 有一个技术原因:如果在类模板中使用,`this`可以对名称查找产生影响.请参阅http://stackoverflow.com/questions/10639053/name-lookups-in-c-templates (2认同)