The keyword this names a pointer to the object for which a non-static member
function ([class.mfct.non-static]) is invoked or a non-static data member's
initializer ([class.mem]) is evaluated.
It shall not appear within
the declaration of a static member function of the current class (although its type and value category
are defined within a static member function as they are within a non-static
member function).
Otherwise, if a member-declarator declares a non-static data
member ([class.mem]) of a class X, the expression this is
a prvalue of type “pointer to X”
wherever X is the current class
within the
optional default member initializer ([class.mem]).
The expression this shall not appear in any other context.
[Example 2: class Outer {int a[sizeof(*this)]; // error: not inside a member functionunsignedint sz =sizeof(*this); // OK: in default member initializervoid f(){int b[sizeof(*this)]; // OKstruct Inner {int c[sizeof(*this)]; // error: not inside a member function of Inner};
}};
— end example]