0

我正在重载运算符等于(==),如下所示:

#include <string>
#include <algorithm>

bool operator == (std::string str1, std::string str2) {
    std::transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
    std::transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
    return (str1 == str2);
}

但是,问题出现在 line return (str1 == str2) 上,因为 operator == 被递归调用。那么,如何调用运算符的原始定义等于(而不是重载)?

此致

4

2 回答 2

0
return std::operator==(str1, str2);

或者

return (str1.compare(str2) == 0);

尽管我怀疑您operator==在通过普通查找std::operator==找到的与通过参数相关的查找找到之间会出现模棱两可的重载错误。无论如何,试图改变 的含义str1 == str2可能不是最好的主意;如果不出意外,它违反了最小惊讶原则

于 2013-10-21T03:51:10.627 回答
0
return (str1 == str2);

to------->

if( 0 == str1.compare(str2))
{
    return true;
}
else
{
    return false;
}
于 2013-10-21T03:56:30.097 回答