this指针的原理和应用(c++)

感觉网上很少说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);
    
    */

     

 

```小子菜蔬学浅,希望大佬指正。

 

上一篇:关于作用域和生存期浅析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值