感觉网上很少说this指针的原理,然后知道的就知道,不知道就不知道。
然后,奔着昊天的使命,我来简单的说一说呗(×diss).
- this是什么?
- 从上图看来,this是一颗 Class_name * 的指针派生类型,然后还有些问题解决,我放到后面来解释const问题。
- 为什么成员函数中可以使用this指针?
- 每一个成员函数都拥有一个指向调用该函数的类对象的隐藏指针,这个指针固定为this,它被系统隐藏。
- 在编译成员函数的时候,编译器会重写成员函数:
- 最后,分析下为什么重写为func(Class_name*const this), 然后在函数体中就变成Class_name*this了?
- 其实是这样的,在函数的参数中指针的const会被忽略。
- 为什么会被忽略呢?
- ps://你是十万个为什么吗~~
- 原因在于,指针的顶层const限制的是指针本身,而不是指针所指对象,那么此时函数接受的实参和形参时复制的指针,以值得形式传递,那么const还有任何意义?将形参不限制为const还能改变实参的值?啦啦啦~
无为民用,皆是异端,那让我们看一看this的应用吧。
- 用于返回自身对象。
class RetObject{
public:
RetObject getSelf(){
return (*this);
}
}
- 用于复制
class Test{
public:
void copy(Test* pt){
this->a = pt->a;
this->s = pt->s;
}
private:
int a;
std::string s;
}
- 在使用成员函数创建线程时,虽然没有使用this,但是却会向this传递实参。
-
#include<iostream> #include<thread> #include<string> class Func { public: void Thread_proc(std::string s) { std::cout << s << "啦啦啦~~~" << std::endl; } }; int main() { Func func; std::thread th(&Func::Thread_proc, &func, "gdl"); th.join(); return 0; } /* template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... args); */
```小子菜蔬学浅,希望大佬指正。
上一篇:关于作用域和生存期浅析