You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

确认C++类成员函数的隐式参数:是this还是*this?

C++类成员函数的隐式参数:this指针而非*this

C++类的非静态成员函数的隐式参数是指向当前对象的指针this,不是对象本身(即不是*this)。

你提到的obj1 + obj2调用成员版operator+时,看似左操作数是obj1对象本身,但实际上编译器会把这个调用转换成obj1.operator+(obj2)的形式——在operator+成员函数内部,你能直接访问obj1的成员,本质是通过this指针间接访问的(比如this->val等价于直接写val)。

用代码举例说明:

class MyClass {
private:
    int val;
public:
    MyClass(int v) : val(v) {}
    MyClass operator+(const MyClass& other) const {
        // this是指向obj1的指针,*this就是obj1对象本身
        return MyClass(this->val + other.val);
    }
};

int main() {
    MyClass obj1(1), obj2(2);
    MyClass obj3 = obj1 + obj2;
    // 编译器会将上面的表达式转换为:
    // MyClass obj3 = obj1.operator+(obj2);
}

简单说:this是隐式传入的指针参数,*this是对该指针解引用后得到的当前对象。你在成员函数里直接用成员变量,是编译器帮你省略了this->的写法,但底层的隐式参数始终是指针类型的this。

内容的提问来源于stack exchange,提问作者zzzhhh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:34:55