扫码关注官方订阅号
小伙看你根骨奇佳,潜力无限,来学PHP伐。
大体看了一下,有几个问题。
几个复合赋值运算符定义有问题,比如:
Polynomial& operator+=(const Polynomial&x) { return *this+ x; // 此处返回了局部变量的引用,是未定义行为 }
原因是*this+x调用了Polynomial::operator+,返回了一个新的Polynomial变量,这个变量是operator+=的局部变量,而operator+=的返回值是这个新变量的引用,所以是未定义行为。其他几个复合赋值运算符类似。
*this+x
Polynomial::operator+
Polynomial
operator+=
题主几个操作符重载的实现不是很好,比如:
operator!=和operator==中只有一个需要具体实现,另一个应该调用被实现的那个;
operator!=
operator==
operator+=应该具体实现,而operator+应该调用operator+=,原因参考这里,减法、乘法类似;
operator+
构造函数初始化成员时应尽量使用成员初始化列表赋初值。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
大体看了一下,有几个问题。
几个复合赋值运算符定义有问题,比如:
原因是
*this+x调用了Polynomial::operator+,返回了一个新的Polynomial变量,这个变量是operator+=的局部变量,而operator+=的返回值是这个新变量的引用,所以是未定义行为。其他几个复合赋值运算符类似。题主几个操作符重载的实现不是很好,比如:
operator!=和operator==中只有一个需要具体实现,另一个应该调用被实现的那个;operator+=应该具体实现,而operator+应该调用operator+=,原因参考这里,减法、乘法类似;构造函数初始化成员时应尽量使用成员初始化列表赋初值。