这是我的逻辑比较运算符(==)重载的代码。我用它来检查两个字符串的大小和内容是否相同。否则应返回false。
bool MyString::operator==(const MyString& other)const
{
if(other.Size == this->Size)
{
for(int i = 0; i < this->Size+1; i++)
{
if(&other == this)
return true;
}
}
else
return false;
}
当我运行valgrind时,它告诉我警告控制已到达非空函数的末尾。关于如何解决此问题以及如何改进代码的任何建议?
最佳答案
当控制到达for
循环的末尾时,您将立即到达函数的末尾而无需返回任何值。
在我看来,您的for
循环中的逻辑无论如何都被蒙蔽了-它正在将另一个项目的地址与此进行比较。虽然可以这样做,但您只需要执行一次,而不是循环执行。
在循环中,您无疑想比较字符串中的字符,而不是对象的地址。
编辑:
一个典型的实现是按照以下一般顺序进行的:
class MyString {
char *data;
size_t length;
public:
// ...
bool operator==(MyString const &other) const {
if (length != other.length)
return false;
for (int i=0; i<length; i++)
if (data[i] != other.data[i]) // If we see any inequality
return false; // they're not equal
return true; // all equal, so the strings are equal.
}
};
关于c++ - 逻辑比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524682/