C++ 正在使用;这";对于所有成员函数和属性,是否存在错误做法?

C++ 正在使用;这";对于所有成员函数和属性,是否存在错误做法?,c++,class,C++,Class,最近我在这里发布了一段代码,并得到一条评论(与原始问题无关)对类的所有成员函数和属性使用this“不仅仅是个人编码风格的问题,这是一种糟糕的做法”。不幸的是,那个人拒绝详细说明,让我自己查一下 我曾经用过谷歌(但用“this”作为关键词查找任何东西都很困难),我在这里四处寻找,但我只发现了何时必须使用this 我知道在某些情况下使用这个是不可避免的(参数/变量具有相同的名称、模板继承等),但随着时间的推移,我开始尽可能地使用这个,因为我可以更容易、更快地找到处理代码的方法。我的理由包括: 快速

最近我在这里发布了一段代码,并得到一条评论(与原始问题无关)对类的所有成员函数和属性使用
this
“不仅仅是个人编码风格的问题,这是一种糟糕的做法”
。不幸的是,那个人拒绝详细说明,让我自己查一下

我曾经用过谷歌(但用“this”作为关键词查找任何东西都很困难),我在这里四处寻找,但我只发现了何时必须使用
this

我知道在某些情况下使用
这个
是不可避免的(参数/变量具有相同的名称、模板继承等),但随着时间的推移,我开始尽可能地使用
这个
,因为我可以更容易、更快地找到处理代码的方法。我的理由包括:

  • 快速检查函数
    f
    是否应该是成员函数:如果代码中没有
    ,则可以将其移出类中
  • 快速检查
    f
    是否可以是
    const
    功能:如果没有
    位于左侧,则最有可能是
    const
    (不总是这样,但我发现它在浏览时很有用)
  • 快速检查对象是否在
    f
    中以“预定义”的方式“更改”自身,或者它是否是一个复合成员函数(使用
    this
    调用的成员方法与不使用this调用的对象上的“外部”算法相比)
  • 调试;i、 e.如果某个成员属性在任何时候被分配了错误的值,我必须集中精力在包含
    this
    的行上才能找到问题所在,因为其他行不会更改对象

坦率地说,关于这是“坏习惯”的评论让我有点紧张。但是,一条评论本身并没有多大意义,因此我想问在所有成员函数和属性中一致使用
这个
是否有什么固有的缺点?如果是,那么让它超越(可能笨拙、不受欢迎或不普遍)个人风格的主要缺点是什么,并将其归为“不良做法”类别?

没有技术原因说明为什么不能在任何地方使用它

如果你只对技术方面的原因感兴趣,那就是你的答案。我恳求你考虑非技术性的原因。形成意见是有原因的,其中一些原因可能是好的。例如,我建议在任何地方都使用它会降低代码的可维护性,重新考虑命名方案会更好地为您服务

考虑到通常情况下,
用于需要它的地方,而不是其他地方。正如您所说,可能需要
这个
,这是有原因的,当大多数程序员遇到
这个
时,他们会想,“这一定是因为一个不明显的原因,我想知道这个原因是什么。”


一致性是可维护代码的一个重要属性。在任何地方使用
this
的主要问题之一是它与大多数其他程序员的实践不一致。由于大多数其他程序员不会在任何地方都使用
这个
,当你在任何地方都使用它时,他们维护你的代码就会变得更加困难

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

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

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

这可能是基于意见。我不认为有任何硬的事实。就我个人而言,我发现
这个
的使用不需要让人分心/烦人。我想,这已经解释清楚了我错了吗?@juanchopanza嘿,我看到你链接的帖子是重复的(以及我在Q中链接的其他两个类似帖子)。然而,我实际上是在寻找确凿的事实:我得到的评论的措辞是这样的,它说这显然是一种不好的做法,其原因大家都应该清楚,我应该能够找到自己的理由。所以,虽然我同意每个人都有自己的偏好,但我想知道的是,是否有确凿的事实证明这是一种糟糕的编码实践,而不是不受欢迎的编码风格。如果我试着将我的问题重新表述到这一点会有帮助吗?没有确凿的事实。因此,答案是主观的。但如果你愿意,我可以重新打开。投票重新打开。这个问题不是基于意见的。如果有任何技术原因不在任何地方使用
这个
,那么这个问题是有效的,而这个问题的答案是“否”。这个问题自然会导致一些基于观点的阐述,说明为什么它仍然是个坏主意,但问题本身是基于事实的。人们可以关闭几乎所有其他合法的网站