确认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
相关产品推荐
相关产品推荐

