【问题标题】:Use of "this" keyword in C++ [duplicate]在 C++ 中使用“this”关键字 [重复]
【发布时间】:2011-10-10 09:56:37
【问题描述】:

可能重复:
Is excessive use of this in C++ a code smell
When should you use the "this" keyword in C++?
Is there any reason to use this->

在 C++ 中,关键字this 通常会被省略吗?例如:

Person::Person(int age) {
    _age = age;
}

相对于:

Person::Person(int age) {
    this->_age = age;
}

【问题讨论】:

  • 大多数人在传递给函数的变量与实例变量同名时使用它...

标签: c++ this


【解决方案1】:

是的。除非有歧义。

【讨论】:

  • o avoid some compilers optimizing virtual function call, 怎么样?
  • 我也很想知道这个问题的答案。 @AlokSave 也许你现在知道并愿意分享?
  • 我现在不记得了。但是在某些特殊情况下需要添加“this”,因为我在 9 年前写答案时出现了一些编译器错误。大概现在已经修好了。从答案中删除。
【解决方案2】:

是的,它不是必需的,通常被省略。但是,在范围内被覆盖后访问变量可能需要它:

Person::Person() {
    int age;
    this->age = 1;
}

还有,这个:

Person::Person(int _age) {
    age = _age;
}

这是很糟糕的风格;如果您需要具有相同名称的初始化程序,请使用此表示法:

Person::Person(int age) : age(age) {}

更多信息在这里:https://en.cppreference.com/w/cpp/language/initializer_list

【讨论】:

  • 我不知道最后一个语法叫什么,你能给我一些提示/信息来了解要搜索什么以了解它是如何工作的吗?
  • 这不仅是糟糕的风格,而且效率也低于初始化。此外,const 和引用变量必须在声明它们的行进行初始化。
  • @orlp 实际上有一种情况你必须使用this-> 指针:如果你使用的是派生模板类。在第一个编译阶段,需要使用this->ParentClass:: 访问父类的成员变量,以确保编译器知道它们不是类型名。
【解决方案3】:

这是程序员的偏好。就个人而言,我喜欢使用this,因为它明确标记了对象成员。当然_ 做同样的事情(只有当你遵守约定时)

【讨论】:

  • 下划线只有在你遵守约定的情况下才会做同样的事情。
  • 使用this 显式标记对象成员也只有在遵循约定时才有效。
  • 请注意,@Rich 提到的“约定”是使用下划线前缀来指示对象成员。当不遵循约定时,方法参数与对象成员的名称完全相同,并且需要this以避免歧义。但我相信明确的this“有效”,无论您是否遵守约定。
【解决方案4】:

任何一种方式都可以,但许多地方都有编码标准,可以指导开发人员采用一种或另一种方式。如果没有这样的政策,就随心所欲。但是,有一件事,如果您确实使用它,它确实有助于代码的可读性。特别是如果您没有遵循类级变量名称的命名约定。

【讨论】:

    【解决方案5】:

    this指向其成员函数引用的对象,因此是可选的。

    【讨论】:

      【解决方案6】:

      对于上面的示例情况,它通常被省略,是的。但是,无论哪种方式在语法上都是正确的。

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2010-10-09
        • 1970-01-01
        • 2019-11-18
        • 2016-06-05
        • 2011-01-26
        • 2019-11-20
        • 2012-04-15
        相关资源
        最近更新 更多