C ++ Char Class Operator

问题描述 投票:0回答:1
bool String::operator < (const String &s) const 
{
int len1 = s.getLength();
int len2 = this->getLength();
int cap;
if(len1>len2) cap = len2;
else cap = len1;
int index=0;
for (int i =0; i < cap;i++)
    if (this->buffer[i] != s[i])
        index =i;
for (int i= index; i < cap; i++)
    if (this->buffer[i] < s[i])
        return true;
for (int i= index; i < cap; i++)
    if (this->buffer[i] > s[i])
        return false;
if (*this == s)
    return false;
if (len2>len1)
    return false;
if (len2<len1)
    return true;
}

我一直在使用这个重载运算符

工作正常。我会尽可能测试每种情况。

但是当我使用F7程序时,它仍然显示'String :: operator

请告诉我此功能中我缺少什么?

c++ string class overloading operator-keyword
1个回答
0
投票

[如果循环不是return,并且如果*this == s为假(您不应该在此函数中进行该比较),并且len2>len1len2<len1都为假(表示len2==len1是真的),那么您确实错过了最后一个return,这是编译器警告您的内容。

您的代码可以简化一些:

bool String::operator < (const String &s) const 
{
    int len1 = this->getLength();
    int len2 = s.getLength();
    int cap = (len1 < len2) ? len1 : len2;
    for (int i = 0; i < cap; ++i) {
        if (this->buffer[i] != s[i]) {
            return (this->buffer[i] < s[i]);
        }
    }
    return (len1 < len2);
}

或者:

#include <algorithm>

bool String::operator < (const String &s) const 
{
    int len1 = this->getLength();
    int len2 = s.getLength();
    int cap = std::min(len1, len2);
    const char* end = this->buffer + cap;
    std::pair<const char*, const char*> ret = std::mismatch(this->buffer, end, s.buffer);
    if (ret.first != end) return (*ret.first < *ret.second);
    return (len1 < len2);
}
© www.soinside.com 2019 - 2024. All rights reserved.