2014-04-19 51 views
3

我对“this”指针进行了一些阅读,我想我比我原来的理解更多,但我仍然需要一些解释。所以,按照我的理解,如果你有在什么情况下,'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指针所有成员函数大多数情况下,这是一门课程。但是如果你有一个不带参数的成员函数,会发生什么?有没有'这个'指针?如果是这样,它是否指向返回类型而不是参数类型?

+0

其实,我相信我已经证明了我自己的愚蠢...... – UnworthyToast

+0

为什么这样,问题似乎没有问题? –

+0

查看代码后,我意识到隐藏的参数C++增加了一个指向类的实例而不是参数的指针。尽管如此,我想我关于是否存在没有参数的成员函数的'this'指针的问题仍然存在。 – UnworthyToast

回答

3

但是如果你有一个不需要 参数的成员函数会发生什么?有没有'这个'指针?如果是这样,它是否指向 返回类型而不是参数类型?

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

+0

在没有参数的情况下,隐藏参数是否有真正的目的?换句话说,你有没有任何例子可以想到在哪里使用'* this'而没有任何其他参数? – UnworthyToast

+0

@UnworthyToast在你的getter(没有参数)中,只需用'return this-> m_nID;'代替你的行就可以得到一个简单的例子 – Brandin

+0

@UnworthyToast有混淆。 'this'指针用于访问对象的成员而不是方法。即使你在函数中没有任何参数,你仍然可以访问所有对象的成员,不是吗? –

1

所有不是静态的类方法都会得到这个指针。

This article给出了关于何时可能要使用此指针的一些想法。

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

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

相关问题