gpt4 book ai didi

C++ 如何从重载运算符中调用运算符的标准形式

转载 作者:行者123 更新时间:2023-11-30 02:33:26 26 4
gpt4 key购买 nike

我正在编写一些需要测试字符串和字符相等性的 C++ 代码,为了简单起见,我想考虑 n-dash (0x96) 和 m-dash (0x97) 字符相同。

我的第一直觉是重新定义相等运算符,并开始编写代码,但随后遇到了一个问题:

inline bool operator==(char lhs, char rhs) {
if (lhs == 0x96 && rhs == 0x97) return true; // works fine
else if (lhs == 0x97 && rhs == 0x96) return true; // works fine
else return lhs == rhs; // infinite recursion...
}

在该函数的最后一行,理想情况下我希望能够调用相等运算符的“旧”形式,类似于派生类能够调用基类版本的函数。

我想知道这在 C++ 中是否可行?如果不是,我假设我应该将上面的代码提取到一个单独的函数中并调用该函数而不是使用运算符。

最佳答案

你不能。一旦您重载了一个运算符,您就可以替换默认的运算符。 (有一个有趣的异常(exception):即 std::addressof 可用于规避重载的 & 运算符)。

我对重载 operator==(char, char) 持强烈保留态度:你会破坏很多代码。

如果您真的必须这样做,您总是可以编写(int)lhs == rhs; 这将导致两者 的转换int 的运算符,因此阻止了递归。因为 intchar 的超集,所以它总是被定义的。奇怪的是,这就是您之前的两个比较起作用的原因:char 的隐式转换正在发生,这阻止了函数调用自身。

关于C++ 如何从重载运算符中调用运算符的标准形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com