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++ 将 wstringstream 传递给另一个函数

c++ - Qt 和 Mac OS X 下注册全局热键

c++ - 从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失

c# - C#中new修饰符的真正意义是什么

oop - 在Scheme中创建带有变量的环境

c++ - 双函数只返回 -0

c++ - Qt5.natvis 在 VS 2015 Update 2 中不起作用

c++ - dlopen 是否重新加载已经加载的依赖项?如果是这样,有什么影响?

php - 抛出异常后无法访问类的属性

javascript - 访问函数作用域外的变量