首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候应该显式使用`this`指针?

什么时候应该显式使用`this`指针?
EN

Stack Overflow用户
提问于 2009-06-14 18:02:41
回答 8查看 42K关注 0票数 117

什么时候应该在类的方法中显式地编写this->member

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-06-14 18:12:35

通常情况下,您不必这样做,this->是隐含的。

有时,存在名称歧义,可用于消除类成员和局部变量的歧义。但是,这里是一个完全不同的情况,其中显式需要this->

考虑以下代码:

代码语言:javascript
复制
template<class T>
struct A {
   int i;
};

template<class T>
struct B : A<T> {

    int foo() {
        return this->i;
    }

};

int main() {
    B<int> b;
    b.foo();
}

如果省略this->,编译器就不知道如何处理i,因为它可能存在于A的所有实例化中,也可能不存在。为了告诉它i确实是A<T>的成员,对于任何Tthis->前缀都是必需的。

注意:仍然可以使用以下命令省略this->前缀:

代码语言:javascript
复制
template<class T>
struct B : A<T> {

    using A<T>::i; // explicitly refer to a variable in the base class

    int foo() {
        return i; // i is now known to exist
    }

};
票数 134
EN

Stack Overflow用户

发布于 2009-06-14 18:10:39

如果在与现有成员同名的方法中声明局部变量,则必须使用this->var来访问类成员,而不是局部变量。

代码语言:javascript
复制
#include <iostream>
using namespace std;
class A
{
    public:
        int a;

        void f() {
            a = 4;
            int a = 5;
            cout << a << endl;
            cout << this->a << endl;
        }
};

int main()
{
    A a;
    a.f();
}

打印:

5

4.

票数 34
EN

Stack Overflow用户

发布于 2009-06-14 23:29:26

虽然我通常并不特别喜欢它,但我已经看到其他人使用它->只是为了从intellisense获得帮助!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/993352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档