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 assignmentreturn this;
}
在 C++ 中,this
指针是一个隐式传递给非静态成员函数的常量指针,用于指向调用该函数的对象。以下是对你的代码和 this
的特性总结:
特性:
this
是一个隐式指针:- 每个非静态成员函数都有一个隐式的
this
指针,用来访问调用该成员函数的对象。 this
指针的类型为ClassName* const
,即常量指针,不能被修改。
- 每个非静态成员函数都有一个隐式的
this
指针的用途:- 访问成员变量和成员函数。
- 返回对象自身的地址。
- 在需要对象指针的场景下传递
this
。
- 静态成员函数中没有
this
指针:- 静态成员函数不与任何特定对象绑定,因此没有
this
指针。
- 静态成员函数不与任何特定对象绑定,因此没有
代码分析
-
正确的用法:
Box* get_address() // 返回当前对象的地址 {return this; }
解释:
- 函数中
this
指针指向调用该函数的对象。 - 返回
this
时即返回调用该函数的对象地址。 - 这是一个有效的用法。
- 函数中
-
错误的用法:
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; // 返回新对象的地址
}