-
June 2nd, 2005, 07:20 AM
#1
C++ General: What is the 'this' pointer?
Q: What is the 'this' pointer?
A: It is a misbelief that the 'this' pointer is a hidden member of a class or struct. It is a hidden parameter of non-static member functions. When you declare a function the compiler adds an extra parameter to function's prototype. The type of the parameter depends on how the function is declared. According to C++ standard, 9.3.2.1:
In the body of a nonstatic member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. The type of this in a member function of a class X is X*. If the member function is declared const, the type of this is const X*, if the member function is declared volatile, the type of this is volatile X*, and if the member function is declared const volatile, the type of this is const volatile X*.
For instance
Code:
class T
{
public:
void foo(int a);
int goo() const;
};
is actually:
Code:
class T
{
public:
void foo(T* this , int a);
int goo(const T* this) const;
};
Static member functions, which don’t have class scope, do not have this extra parameter. One consequence is that you cannot use a non-static member function as a thread function even if it has the correct prototype
Code:
UINT ThreadFunction(LPVOID param);
because that in fact the prototype (when non-static) is
Code:
UINT ThreadFunction(T* this, LPVOID param);
Last edited by Andreas Masur; July 23rd, 2005 at 01:09 PM.
-
August 28th, 2005, 06:19 AM
#2
Re: C++ General: What is the 'this' pointer?
There are a few more peculiarities of the this pointer:
- It is impossible to take the address of the this pointer.
- It is impossible to assign anything to the this pointer. (i.e. its not an l-value).
Last edited by Andreas Masur; September 4th, 2005 at 10:28 AM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|