【问题标题】:In what scenario 'this' pointer is passed to the class methods? [duplicate]在什么情况下“this”指针被传递给类方法? [复制]
【发布时间】:2014-06-03 15:12:10
【问题描述】:

我正在阅读“this”指针,我想我比原来更了解它,但我仍然需要澄清一下。所以,据我了解,如果你有

class Simple
{
private:
    int m_nID;

public:
    Simple(int nID)
    {
        SetID(nID);
    }

    void SetID(int nID) { m_nID = nID; }
    int GetID() { return m_nID; }
};

SetID(int nID) 函数实际上在语义上转换为:

void SetID(Simple* const this, int nID) { this->m_nID = nID; }

在大多数情况下,一个类的所有成员函数都有一个this 指针,这是有道理的。但是如果你有一个不带参数的成员函数会发生什么呢?是否有“this”指针?如果是,它是否指向返回类型而不是参数类型?

【问题讨论】:

  • 其实我相信我刚才已经证明了自己的愚蠢……
  • 为什么,问题似乎没问题?
  • 查看代码后,我意识到 C++ 添加的隐藏参数是指向类实例的指针,而不是参数。尽管如此,我想我的问题仍然存在。
  • @WorthyToast 试图准确地理解事物是如何工作的,在像编程这样的复杂领域中是一种很好的态度。 C++ 有一个陡峭的学习曲线,有时对一旦理解了它们就会看起来很明显的事情感到困惑是完全正常的。

标签: c++ this class-method


【解决方案1】:

但是如果你有一个成员函数不接受 论据?是否有“this”指针?如果是这样,它是否指向 返回类型而不是参数类型?

即使你的方法没有任何参数,它仍然有一个隐藏参数,即this指针。

【讨论】:

  • 在没有参数的情况下,隐藏参数有什么真正的目的吗?换句话说,有没有什么例子可以让你想到在没有任何其他参数的情况下使用*this
  • @UnworthyToast 在您的 getter(没有参数)中,只需将您的行替换为 return this->m_nID; 即可获得一个简单的示例
  • @UnworthyToast 有混乱。 this 指针用于访问对象而不是方法的成员。即使你在函数中没有任何参数,你仍然可以访问对象的所有成员,不是吗?
【解决方案2】:

所有非静态的类方法都获得一个 this 指针。

This article 提供了一些关于何时需要使用 this 指针的想法。

C++ 中 this 指针的存在与调用约定有关。这意味着堆栈和 cpu 寄存器中的空间如何为函数的参数保留存在差异。

C++ 中的非静态方法通常使用thiscall 约定,而不是其他约定(因编译器和体系结构而异)。

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2016-07-20
    • 1970-01-01
    • 2023-03-30
    • 2012-02-19
    相关资源
    最近更新 更多