【问题标题】:this->member VS member in C++ [duplicate]C ++中的this->member VS成员[重复]
【发布时间】:2015-07-12 22:31:29
【问题描述】:

这有什么区别:

int MyClass::getId() {
    return this->id;
}

还有这个:

int MyClass::getId() {
    return id;
}

在 C++ 中?

【问题讨论】:

  • 我不知道在搜索中放什么,自动标题搜索和谷歌都没有给出任何好的结果
  • 这里有的区别,但它只出现在特定条件下的模板巫术的复杂情况下,所以你可能永远不会遇到它。
  • 如果您没有阴影变量,则没有区别。如果您有阴影变量,那么无论如何您的代码库中都会出现更大的问题。打开编译器警告以确保没有阴影变量。

标签: c++ pointers this member members


【解决方案1】:

第一个示例将查找名称“id”的范围限制为 MyClass 类的成员。

第二个例子没有。

这会有所不同,例如MyClass 没有成员“id”,或者当前方法有同名的局部变量或参数。

【讨论】:

    【解决方案2】:

    这取决于上下文。例子:

    template <typename> struct X { int a; };
    
    int b;
    
    template <typename T> struct Foo : X<T> {
        int f() {
            return this->a;    // OK
            // return a;       // Error
        }
    
        int g() {
            // return this->b; // Error
            return b;          // OK
        }
    };
    

    【讨论】:

      【解决方案3】:

      假设您的类有一个名为id 的成员变量,则没有区别。即使你有一个全局的id 变量,成员变量总是优先的。

      你的下一个问题是: 那么为什么会存在this 关键字呢?

      有些情况你绝对需要它。

      一个例子是你想要一个函数返回一个指向对象本身的指针/引用(*):

      return *this;    //reference
      return this;     //pointer
      

      你想把它作为参数传递给函数

      some_function(*this);    //reference(&) or value, depends on some_function signature
      some_function(this);     //pointer
      

      它也可以用在this-&gt;id中,只是为了易读,只是为了让下一个阅读代码的人立即知道 id 是类的组成部分而不是全局的,没有功能优势。

      如果您使用调试器,this 也可能是它的可检查变量。

      【讨论】:

        猜你喜欢
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多