c++中this指针使用bug

1.bug代码:

cpp 复制代码
template<typename T>
class Test {
private:
    T num;
public:
    Test() {}

    void setData(const T& x) {
        this.num = x;  // ❌ 这里会报错
    }

    void showData() {
        cout << this->num << endl;
    }
};

2. 报错原因

在 C++ 里:

  • this 是一个指针,它指向当前对象的地址。
  • 既然 this 是指针,访问它所指向对象的成员变量或成员函数时,必须用箭头运算符 -> ,而不是点运算符 .

正确写法

cpp 复制代码
this->num = x;

为什么不能用点运算符 .

  • . 用于对象本身 访问成员:

    复制代码
    Test<int> obj;
    obj.num = 5; // 对象用点运算符
  • -> 用于指针 访问成员:

    复制代码
    Test<int>* p = &obj;
    p->num = 5; // 指针用箭头运算符
  • thisTest* const 类型的指针,所以必须写成 this->num


3. 修正后的代码

复制代码
template<typename T>
class Test {
private:
    T num;
public:
    Test() {}

    void setData(const T& x) {
        this->num = x;  // ✅ 正确写法
    }

    void showData() {
        cout << this->num << endl;
    }
};

4. 另外一种情况:模板类中 this-> 的作用

在模板类里,有时 this-> 还有提示编译器的作用

  • 如果成员依赖于模板参数,编译器需要知道它是类的成员,否则可能无法正确解析。

  • 例如:

    复制代码
    template <typename T>
    struct Base {
        void foo();
    };
    
    template <typename T>
    struct Derived : Base<T> {
        void bar() {
            this->foo(); // 必须用 this->,否则编译器不知道 foo 是基类的成员
        }
    };

    这是因为在模板中,基类的成员名不会自动进入派生类的作用域,需要用 this->Base<T>:: 显式访问。


5. 总结

用法 适用场景
object.member 对象访问成员
pointer->member 指针访问成员
this->member 在类的成员函数中访问当前对象的成员(因为 this 是指针)

一句话解释你这个报错

this 是一个指针,访问成员要用 -> 而不是 .,所以 this.num 应该写成 this->num

相关推荐
jiayu19 分钟前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu20 分钟前
Angular6学习笔记13:HTTP(3)
前端
小码哥_常23 分钟前
Kotlin抽象类与接口:相爱相杀的编程“CP”
前端
evelynlab24 分钟前
Tapable学习
前端
LeeYaMaster38 分钟前
15个例子熟练异步框架 Zone.js
前端·angular.js
evelynlab41 分钟前
打包原理
前端
拳打南山敬老院1 小时前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
用户3076752811271 小时前
💡 从"傻等"到"流淌":我在AI项目中实现流式输出的血泪史(附真实代码+深度解析)
前端
bluceli2 小时前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
SuperEugene2 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试