c++ - 逻辑比较运算符

标签 c++ oop function error-handling operator-overloading

这是我的逻辑比较运算符(==)重载的代码。我用它来检查两个字符串的大小和内容是否相同。否则应返回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/

相关文章:

c++ - 如何使用 "billboards"在屏幕上创建一个球形物体

c++ - Visual Studio 包含来自其他项目的 cpp 文件

javascript - 创建jquery函数

c++ - 从挤压多边形构建多面体

c++ - 为什么 c++ 不包括\n 而 python 不是

php - 多个函数是 PHP 中的一个大函数?

ios - 设置模型类之间的关系

php - 来自动态函数名称的 Javascript 新对象实例

swift - Swift 3 中泛型函数的问题

当脚本从函数中获取时 Bash shell 变量丢失