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

相关推荐
weixin_493503675 小时前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
码匠许师傅6 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
啦啦啦啦啦zzzz7 小时前
Logger的组装(c++20)
c++·算法·c++20
尾善爱看海8 小时前
前端算法与手写题集
前端·算法
徐小夕8 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
繁星蓝雨8 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
蒸蒸yyyyzwd8 小时前
机试学习笔记
c++·求职招聘
萧鼎9 小时前
Python 高性能Web框架神器 FastAPI:自动生成API文、基于Pydant、异步请求处理全搞定
前端·python·fastapi
handler0110 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
郝学胜-神的一滴10 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio