C++ 编程/类/this
外观
this 关键字充当指向被引用类的指针。this 指针的行为与其他指针相同,尽管您无法更改指针本身。阅读关于 指针和引用 的部分以了解有关一般指针的更多信息。
this 指针只能在类的、联合的或结构的非静态成员函数中访问,在静态成员函数中不可用。无需为this 指针编写代码,因为编译器会隐式地执行此操作。在使用调试器时,您可以在程序单步执行非静态类函数时在某些变量列表中看到this 指针。
在以下示例中,编译器在非静态成员函数 int getData() 中插入了隐式参数this。此外,启动调用的代码传递了一个隐式参数(由编译器提供)。
class Foo
{
private:
int iX;
public:
Foo(){ iX = 5; };
int getData()
{
return this->iX; // this is provided by the compiler at compile time
}
};
int main()
{
Foo Example;
int iTemp;
iTemp = Example.getData(&Example); // compiler adds the &Example reference at compile time
return 0;
}
在某些情况下,程序员应该了解并使用this 指针。在重载赋值运算符时,应该使用this 指针来防止灾难。例如,在上面的代码中添加一个赋值运算符。
class Foo
{
private:
int iX;
public:
Foo() { iX = 5; };
int getData()
{
return iX;
}
Foo& operator=(const Foo &RHS);
};
Foo& Foo::operator=(const Foo &RHS)
{
if(this != &RHS)
{ // the if this test prevents an object from copying to itself (ie. RHS = RHS;)
this->iX = RHS.iX; // this is suitable for this class, but can be more complex when
// copying an object in a different much larger class
}
return (*this); // returning an object allows chaining, like a = b = c; statements
}
无论您对this 了解多少,它在实现任何类中都至关重要。