gpt4 book ai didi

c++ - 什么时候需要 'this'?

转载 作者:可可西里 更新时间:2023-11-01 18:08:21 24 4
gpt4 key购买 nike

是否需要this 指针?如果您在功能上传递 this 指向的类的实例,我想您会需要它。但是就设置/检索/调用/任何成员而言,this 总是可选的吗?

我已经标记了这个 C++,因为这是我特别想知道的语言,但是如果有人可以确认该构造对于 Java 和其他使用 this 指针的 OO 语言是相同的,不胜感激。

最佳答案

我能想到的三种情况:

当你只想传递一个指向当前类的指针时:

class B;
struct A {
B* parent_;
A(B* parent) : parent_(parent) {}
};

struct B {
A* a;
B() : a(new A(this)) {}
};

在构造函数或成员函数中,成员被参数隐藏:

struct A {
int a;
void set_a(int a) { this->a = a; }
};

这里,成员变量“a”被参数“a”遮蔽,因此 this-> 用于访问成员而不是参数。

(上面的例子被编辑成一个函数而不是构造函数,因为你通常不会在构造函数中以这种方式分配)


在模板类的基类中访问公共(public)/ protected 成员变量或函数时

template <class T>
struct A {
int a;
};

template <class T>
struct B : public A<T> {
int f() { return this->a; }
}

在这里,单独的a 不会是从属名称,因此编译器希望在BB< 的基类中找到它的声明 不依赖于 T。添加 this-> 使查找依赖于 this 的类型,并且由于 this 是依赖类型,因此查找 a 被推迟到 f() 被实例化。

可以写 return A::a 而不是 return this->a,但是在存在多个碱基的情况下,无论是直接的还是间接的,使用 this-> 更灵活。这种替代语法也仅限于成员变量和非虚函数 - 如果它与虚函数一起使用,它将直接调用函数而不是进行虚函数调用。

关于c++ - 什么时候需要 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com