加号重载必须返回值类型t,不可返回t&或const t&;正确做法是返回t(如friend t operator+(const t&, const t&)),配合operator+=实现,支持移动语义且避免悬垂引用。

加号重载必须返回值,不能返回引用
直接返回 const T& 或 T& 是常见错误。加号语义是生成新对象,不是修改原对象,所以必须返回值类型(如 T),否则可能引发悬垂引用或静默错误。
- 如果返回
T&,返回局部对象的引用,运行时崩溃风险高 - 如果返回
const T&,虽能编译,但绑定到临时对象后生命周期不可控,C++11 后多数编译器会报binding reference to a temporary - 正确做法:返回
T,让移动语义(C++11+)自动优化开销
成员函数 vs 友元函数:什么时候用哪个
取决于是否需要访问私有成员,以及是否支持左操作数为非类类型(比如 int + MyClass)。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 成员版本:
T operator+(const T& other) const—— 只能处理obj + other,左操作数必须是当前类类型 - 友元版本:
friend T operator+(const T& a, const T& b)—— 支持对称性,也方便后续扩展隐式转换(如5 + obj) - 若类有
explicit构造函数,友元版更安全;若所有成员公有,成员版更简洁
注意 const 正确性和参数传递方式
运算符重载函数本身应声明为 const(不修改 *this),参数也建议用 const T& 避免无谓拷贝。
- 错误写法:
T operator+(T other)—— 触发一次拷贝构造,低效 - 错误写法:
T operator+(T& other)—— 无法绑定字面量或临时对象(如a + b + c中间结果) - 推荐写法:
friend T operator+(const T& a, const T& b),函数体里用return T{a.x + b.x, a.y + b.y}这类直接构造
和 += 配合使用能减少重复代码
习惯上先实现 operator+=(成员函数,返回 T&),再用它实现 operator+,逻辑复用且符合直觉。
-
operator+=修改自身,可返回*this(T&),支持链式调用:a += b += c -
operator+基于它实现:return T{*this} += other;—— 先拷贝,再就地加,清晰且不易出错 - 这种组合在标准库容器(如
std::string)中广泛采用,也利于编译器内联优化
operator+ 返回值时,确保移动构造函数可用,否则拷贝开销可能陡增。另外,别忘了重载 operator== 和 operator 来方便调试——它们和加号一起出现的频率极高。C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










