当前位置: 首页 > news >正文

c++中的this

在 C++ 中,this 是一个指向当前对象实例的指针,它隐式地存在于类的非静态成员函数中。以下是 this 的详细用法和常见场景:


1. 常见场景

  • 明确成员归属:当成员变量与局部变量同名时,用 this-> 显式访问成员。当成员变量与局部变量非同名时,this是隐式的
  • 返回对象自身:在成员函数中返回当前对象的引用或指针(常见于链式调用设计)。
  • 传递对象自身:将当前对象作为参数传递给其他函数。
示例代码
#include <iostream>
using namespace std;

class MyClass {
public:
    int value;

    // 场景1:区分成员变量和参数
    void setValue(int value) {
        this->value = value; // 使用 this 消除歧义
    }

    // 场景2:返回对象自身(链式调用)
    MyClass& add(int x) {
        value += x;
		cout << "add value: " <<value << endl;
        return *this; // 返回当前对象的引用
    }

    // 场景3:传递对象自身
    void print() {
        helper(this); // 将当前对象指针传递给其他函数
    }

private:
    void helper(MyClass* obj) {
        cout << "Value: " << obj->value << endl;
    }
};

int main() {
    MyClass obj;
    obj.setValue(10);
    obj.add(5).add(3); // 链式调用(add 返回 *this)
    obj.print();        // 输出:Value: 18
    return 0;
}

2. 注意事项

(1) 静态成员函数中没有 this
  • 静态函数属于类而非对象,不能使用 this
class StaticExample {
public:
    static void staticFunc() {
        // this->value; // 错误!静态函数无 this
    }
};
(2) 返回 *this 时注意对象生命周期
  • 如果对象是局部变量,返回 *this 可能导致悬垂引用:
class BadExample {
public:
    BadExample& badMethod() {
        return *this; // 若对象是局部变量,返回后可能失效!
    }
};
(3) this 的类型
  • this 的类型是 ClassName*(指针),在常量成员函数中是 const ClassName*
class ConstExample {
public:
    void constFunc() const {
        // this 是 const ConstExample* 类型
        // this->modify(); // 错误!不能在 const 函数中调用非 const 方法
    }
    void modify() {}
};

相关文章:

  • 用java代码如何存取数据库的blob字段
  • 02 - spring security基于配置文件及内存的账号密码
  • 设计模式 --- 访问者模式
  • 【LeetCode】算法详解#4 ---合并区间
  • 进程线程回顾
  • Pinia最基本用法
  • Nginx基础讲解
  • ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程
  • 论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用
  • flutter 桌面应用之右键菜单
  • 【Cursor 】Cursor 安装与配置指南:从零开始的高效开发之旅
  • QT6 源(16):存储 QT 里元对象的类信息的类 QMetaClassInfo 的类,只有两个成员函数 name()、value(),比元对象属性简单多了
  • 数据驱动,数字能量分析API助力手机号数据解读
  • RAG Fusion技术详解与应用场景
  • 趣味编程之Spring的白学之路
  • 二、Android Studio环境安装
  • [React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地
  • 波束形成(BF)从算法仿真到工程源码实现-第七节-关于波束10个基本概念
  • Jenkins 发送钉钉消息
  • 前端jest(vitest)单元测试快速手上
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营
  • 广西隆林突发山洪,致3人遇难1人失联
  • 精品消费“精”在哪?多在体验上下功夫
  • 李伟任山东省委常委、省纪委书记
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元
  • 悬疑剧背后的女编剧:创作的差异不在性别,而在经验