”还是删除它都没有关系。它在两种情况下都提供相同的输出和结果。那么,在 C++ 中使用“this”指针有什么意义呢?还有其他必要的用法吗?谢谢。 #includ-6ren">
gpt4 book ai didi

C++: "this"指针没用吗?

转载 作者:太空狗 更新时间:2023-10-29 23:22:48 25 4
gpt4 key购买 nike

在下面的代码中,无论是放置“this->”还是删除它都没有关系。它在两种情况下都提供相同的输出和结果。那么,在 C++ 中使用“this”指针有什么意义呢?还有其他必要的用法吗?谢谢。

#include<iostream>
using namespace std;

class square{
int l;
int w;
public:
square(int x, int y){
w = x;
l = y;
}
int getArea(){
return w * l;
};
bool AreaSmallerThan(square c){
if(this->getArea() < c.getArea())
return true;
else
return false;
}

};

int main(){
square A(2,3);
square B(1,3);
if(A.AreaSmallerThan(B))
cout<<"A is smaller than B."<<endl;
else
cout<<"A is NOT smaller than B."<<endl;
return 0;
}

最佳答案

TL;DR:它有它的用途。如果您选择良好的命名习惯,您通常不需要经常使用它。

在许多情况下,您会需要“指向当前对象的指针”,例如:

struct Foo
{
void MakeCallback(eventid_t eventId)
{
scheduleCallback(eventId, callbackProxyFn, this);
}

static void callbackProxyFn(eventid_t eventId, Foo* foo)
{
// call 'callback' on the relevant object instance.
foo->callback(eventId);
}

void callback(eventid_t eventId);
};

如果您选择使用糟糕的命名约定,它还可以用于解决当前对象和其他范围内名称之间的冲突。

void Foo::bar(int n)
{
this->n = n;
}

您可以通过在静态、全局和成员前加上前缀来避免这种(双关语)场景,这是常见的做法:

class Player {
int m_score;
public:
Player(int score) : m_score(score) {}
};

Player g_player1;
static Player s_login; // yeah, I know, terrible, just an example tho.

一个常见的用途是在复制/比较运算符中消除 self :

bool Foo::operator==(const Foo& rhs) const
{
if (this == &rhs)
return true;
...
}

您还可以使用它来生成对当前对象的引用:

foo(const Foo&);

void foo(*this);

关于C++: "this"指针没用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396735/

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