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

时间:2016-02-17 12:24:27

标签: c++ operators

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

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

0x97

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

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

2 个答案:

答案 0 :(得分:2)

你不能。一旦操作员超载,您替换默认操作符。 (有一个有趣的例外:即std::addressof可用于绕过重载的&运算符。

我对重载operator==(char, char)抱有很强的保留意见:你会打破很多代码。

如果确实必须这样做,您可以随时写(int)lhs == rhs;,这会导致两个运算符转换为int,从而阻止递归。由于intchar的超集,因此始终会定义此值。奇怪的是,这就是为什么你的两个先前的比较有效:char的隐式转换正在发生,这阻止了函数调用自身。

答案 1 :(得分:1)

首先,永远不要试图纯粹在内置类型上重载运算符......而是使用函数...

由于type promotion

,您的第一个比较语句有效

char将转换为int并进行比较...最后一次再次调用您的运营商