[C++游戏开发基础]:深入解析this指针的应用与技巧

这是一篇VIP文章,如果你还不是会员,请移步https://www.ilikexff.cn/articles/150免费阅读。

如果你没有其他面向对象的编程语言基础,比如Javac#等,那么你在学习C++面向对象时可能会好奇,当一个成员函数被调用的时候,C++是如何跟踪它被调用的对象的?

考虑下面的程序:

#include <iostream>

class Simple
{
   
private:
    int m_id{
   };

public:
    Simple(int id)
        : m_id{
    id }
    {
   
    }

    int getID() const {
    return m_id; }
    void setID(int id) {
    m_id = id; }

    void print() const {
    std::cout << m_id; }
};

int main()
{
   
    Simple simple{
   1};
    simple.setID(2);

    simple.print();

    return 0;
}

对于上述代码,当我们调用 simple.setID(2); 时,C++知道函数 setID() 应该对对象 simple 进行操作,并且 m_id 实际上引用了 simple.m_id

为什么会这样?这因为C++使用了一个名为this的隐藏指针。


隐藏的this指针

在每一个成员函数中,关键字this是一个常量指针,它保存当前隐式对象的地址。因此,下面两种写法是等效的;

void print() const {
   std::cout <<m_id;}
void print() const {
   std::cout <<this->m_id;}

但是事实证明,前者是后者的简写。当我们程序编译时,编译器将隐式地在引用隐式对象的任何成员前面加上this-> 。 这有助于我们的代码跟更简洁,而不需要一遍遍的重复this->

我们使用 -> 从指向对象的指针中选择成员。this->m_id 相当于 (*this).m_i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xayla

轻轻一点,暖心房

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值