C++ 的this指针辨析

C++ 的 this 指针

指针在这里面是非常难理解的东西,所以要根据例子,自己实践。
在你没有去具体了解之前,不要轻易下结论。
最近,看了《在山的那边》,又有一点新感悟( •̀ ω •́ )✧

this指针

调用成员函数时,成员函数通过一个名为 this 的隐式参数来访问调用它的那个对象,用请求该函数的对象地址初始化 this ,this 的指向总是自己这个对象,所以 this 是一个常量指针

Box* get_address()   //得到this的地址
{
	return this;
}
Box* get_address()   //得到this的地址
{
	Box box;
	this = &box; // error: lvalue required as left operand of assignment
    return this;
}

在 C++ 中,this 指针是一个隐式传递给非静态成员函数的常量指针,用于指向调用该函数的对象。以下是对你的代码和 this 的特性总结:

特性:
  1. this 是一个隐式指针
    • 每个非静态成员函数都有一个隐式的 this 指针,用来访问调用该成员函数的对象。
    • this 指针的类型为 ClassName* const,即常量指针,不能被修改。
  2. this 指针的用途
    • 访问成员变量和成员函数。
    • 返回对象自身的地址。
    • 在需要对象指针的场景下传递 this
  3. 静态成员函数中没有 this 指针
    • 静态成员函数不与任何特定对象绑定,因此没有 this 指针。

代码分析
  1. 正确的用法

    Box* get_address() // 返回当前对象的地址
    {
        return this;
    }
    

    解释

    • 函数中 this 指针指向调用该函数的对象。
    • 返回 this 时即返回调用该函数的对象地址。
    • 这是一个有效的用法。
  2. 错误的用法

    Box* get_address() 
    {
        Box box;
        this = &box; // 错误: 赋值操作试图修改 `this`
        return this;
    }
    

    错误原因

    • this 是一个常量指针,不能被赋值。
    • this 的作用是固定指向当前调用对象,任何试图修改 this 都会导致编译错误。

总结
  • this 指针的值是无法更改的,它始终指向当前对象。
  • 如果需要返回一个新对象的地址,应该直接返回新对象的地址而不是试图修改 this

正确示例:

Box* create_new_box()
{
    Box* box = new Box();
    return box; // 返回新对象的地址
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜猫程序猿

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值