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

相关推荐
Cobyte1 天前
4.响应式系统基础:从发布订阅模式的角度理解 Vue3 的数据响应式原理
前端·javascript·vue.js
晓得迷路了1 天前
栗子前端技术周刊第 124 期 - ESLint v10.2.0、React Native 0.85、Node.js 25.9.0...
前端·javascript·eslint
say_fall1 天前
有关算法的简单数学问题
数据结构·c++·算法·职场和发展·蓝桥杯
半个俗人1 天前
fiddler的基础使用
前端·测试工具·fiddler
a1117761 天前
变电站数字孪生大屏ThreeJS 开源项目
前端·信息可视化·开源·html
恋猫de小郭1 天前
AI 的公开测评得分都在作弊,就像泡面的封面,一切以实物为准
前端·人工智能·ai编程
禅思院1 天前
使用 VueUse 构建一个支持暂停/重置的 CountUp 组件
前端·vue.js·架构
薛定e的猫咪1 天前
2026 年 4 月实测:OpenAI Codex 保姆级教程,从安装到 MCP、Skills 与多智能体协作
前端·数据库·人工智能
I love studying!!!1 天前
Web应用程序:用户账户
前端·数据库·sqlite
whuhewei1 天前
React性能优化
前端·react.js·性能优化