C ++:“ this”指针没有用吗?

卡维

在下面的代码中,我放“ 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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Volley-Request.setSequence没有用吗?

来自分类Dev

野牛优先没有用吗?它不起作用

来自分类Dev

Python-sendto()的返回值没有用吗?

来自分类Dev

为什么C#编译器在catch中授权“ throw ex”,并且在某些情况下“ throw ex”有用吗?

来自分类Dev

FILTER_SANITIZE_URL没有用吗?

来自分类Dev

有或没有用C ++包装的类

来自分类Dev

在C ++ 14中new和delete仍然有用吗?

来自分类Dev

原子分组的交替是没有用的吗?

来自分类Dev

没有用Objective-C选择器('nextPage')声明的方法

来自分类Dev

C#知识在Linux系统中有用吗?

来自分类Dev

为什么没有用C考虑法律效果的声明?

来自分类Dev

在启用了Null的c#环境中仍然使用NotNull属性有用吗?还是没有区别呢?

来自分类Dev

.cpp文件有用吗?

来自分类Dev

我已经用C语言编写了代码,但是没有用?

来自分类Dev

C#知识在Linux系统中有用吗?

来自分类Dev

不确定为什么我的字符串的首字母没有用C打印吗?

来自分类Dev

C ++:没有用户凭据的Windows日常任务计划

来自分类Dev

FILTER_SANITIZE_URL没有用吗?

来自分类Dev

没有用python写入文件吗?

来自分类Dev

线程C ++:没有用于调用的匹配函数

来自分类Dev

我想从html中使用jquery排除某些类,例如$('html')。not('。classname'),但这没有用吗?

来自分类Dev

如何在没有用户输入密码的情况下用C#加密和解密敏感信息

来自分类Dev

你能在 Java/C# 中返回 super 吗?(如果可以的话会有用吗?)

来自分类Dev

尽管我添加了 boost 库,但 Eclipse 并没有用 C++ 构建它们。为什么?

来自分类Dev

为什么我的 C++ 对象没有用给定的值销毁?

来自分类Dev

为什么我的文件没有用 ifstream C++ 打开?

来自分类Dev

v 没有用 c++ 向量命名类型错误

来自分类Dev

在推荐的 Auto-Dependency Generation with makefiles 中 %.o 目标的先决条件中列出 c/c++ 源文件有用吗?

来自分类Dev

有什么方法可以使 Visual Studio C++ 错误输出有用吗?

Related 相关文章

  1. 1

    Android Volley-Request.setSequence没有用吗?

  2. 2

    野牛优先没有用吗?它不起作用

  3. 3

    Python-sendto()的返回值没有用吗?

  4. 4

    为什么C#编译器在catch中授权“ throw ex”,并且在某些情况下“ throw ex”有用吗?

  5. 5

    FILTER_SANITIZE_URL没有用吗?

  6. 6

    有或没有用C ++包装的类

  7. 7

    在C ++ 14中new和delete仍然有用吗?

  8. 8

    原子分组的交替是没有用的吗?

  9. 9

    没有用Objective-C选择器('nextPage')声明的方法

  10. 10

    C#知识在Linux系统中有用吗?

  11. 11

    为什么没有用C考虑法律效果的声明?

  12. 12

    在启用了Null的c#环境中仍然使用NotNull属性有用吗?还是没有区别呢?

  13. 13

    .cpp文件有用吗?

  14. 14

    我已经用C语言编写了代码,但是没有用?

  15. 15

    C#知识在Linux系统中有用吗?

  16. 16

    不确定为什么我的字符串的首字母没有用C打印吗?

  17. 17

    C ++:没有用户凭据的Windows日常任务计划

  18. 18

    FILTER_SANITIZE_URL没有用吗?

  19. 19

    没有用python写入文件吗?

  20. 20

    线程C ++:没有用于调用的匹配函数

  21. 21

    我想从html中使用jquery排除某些类,例如$('html')。not('。classname'),但这没有用吗?

  22. 22

    如何在没有用户输入密码的情况下用C#加密和解密敏感信息

  23. 23

    你能在 Java/C# 中返回 super 吗?(如果可以的话会有用吗?)

  24. 24

    尽管我添加了 boost 库,但 Eclipse 并没有用 C++ 构建它们。为什么?

  25. 25

    为什么我的 C++ 对象没有用给定的值销毁?

  26. 26

    为什么我的文件没有用 ifstream C++ 打开?

  27. 27

    v 没有用 c++ 向量命名类型错误

  28. 28

    在推荐的 Auto-Dependency Generation with makefiles 中 %.o 目标的先决条件中列出 c/c++ 源文件有用吗?

  29. 29

    有什么方法可以使 Visual Studio C++ 错误输出有用吗?

热门标签

归档