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

C++赋值运算符重载中this指针与*this返回的困惑求助

为什么赋值运算符返回*this而不是this?

嘿,我完全懂你的困惑——这个点刚学C++的时候确实容易绕晕,咱们把它拆解开说清楚:

首先,先盯紧你的赋值运算符的返回类型:SimpleString& operator=(const SimpleString& other),这里的返回类型是SimpleString&,也就是SimpleString对象的引用,不是你误以为的指针类型!这是整个问题的核心。

那this是什么?在C++的成员函数里,this是一个指向当前对象的指针,它的类型是SimpleString*。而*this就是对这个指针做解引用操作,得到的是当前对象本身(一个SimpleString实例)。因为函数要返回的是对象的引用,所以返回*this就刚好匹配返回类型——相当于把当前对象的引用返回出去。

如果按你想的返回this(指针),编译器直接就会报错,因为SimpleString*类型没法转换成SimpleString&类型,类型不匹配。

另外,这么做还有一个重要的原因:支持链式赋值。比如咱们平时写的a = b = c;,这种写法能生效,就是因为b = c返回的是b的引用,然后这个引用再赋值给a。如果返回的是指针,那b = c返回的是&b,这时候a = &b就变成了把指针赋值给对象,完全不符合逻辑,编译器也不会允许。

再回到你的代码片段:

SimpleString& operator=(const SimpleString& other) {
if(this == &other) return *this;
const auto new_buffer = new char[other.max_size];
delete[] buffer;
buffer = new_buffer;
length = other.length;
max_size = other.max_size;
std::strncpy(buffer, other.buffer, max_size);
return *this;
}

这里的return *this完全符合C++赋值运算符的惯例:返回当前对象的非const引用,这样既支持链式赋值,还能允许像(a = b).someMemberFunction()这样的操作——直接对赋值后的对象调用成员方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:57:28