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

相关推荐
leiming66 分钟前
c++ 容器 queue
开发语言·c++
张较瘦_6 分钟前
前端 | 代码可读性 + SEO 双提升!HTML 语义化标签实战教程
前端·html
繁星星繁6 分钟前
【项目】基于SDK实现的智能聊天助手(使用api接入deepseek)------(二)
c++·设计模式·学习方法
CSDN_RTKLIB10 分钟前
【类定义系列三】内联函数进阶
开发语言·c++
似水流年QC15 分钟前
前端国际化实战指南:i18n 工程化最佳实践总结
前端
GISer_Jing16 分钟前
企业级前端脚手架:原理与实战指南
前端·前端框架
非凡ghost21 分钟前
Floorp Browser(基于Firefox火狐浏览器)
前端·windows·学习·firefox·软件需求
北京流年22 分钟前
执行clang --version报错说由于找不到 libgcc_s_seh-1.dll和 找不到 libstdc++-6.dll 这两个文件
开发语言·c++
hpz122323 分钟前
XHR和Fetch功能对比表格
前端·网络请求
我是小邵29 分钟前
【踩坑实录】一次 H5 页面在 PC 端的滚动条与轮播图修复全过程(Vue + Vant)
前端·javascript·vue.js