如果定义了以下类 Foo
。据说它重载 一元与号 (&
) 运算符:
class Foo {
public:
Foo* operator&() { return nullptr; }
};
我认为在这种情况下,(不管您可以通过 std::addressof()
和其他惯用技巧获取此类对象的地址这一事实)没有办法访问/选择返回被调用对象地址的原始一元符号运算符,我错了吗?
然而,通过重载,我了解到有一组函数,将在编译时根据某些标准选择其中的一个。但这种想法似乎与上面的场景不符。
为什么它被称为重载而不是像重新定义或替换这样的东西?
最佳答案
考虑以下代码:
int x;
Foo y;
&x; // built-in functionality
&y; // y.operator&();
我们有两个不同类型的变量。我们对它们都应用相同的 &
运算符。对于 x
,它使用内置的 address-of 运算符,而对于 y
,它调用您的用户定义函数。
这正是您描述的重载:有多个函数(好吧,其中一个是内置函数,不是真正的“函数”)并且它们是基于关于操作数的类型。
关于c++ - 为什么叫运算符重载呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101287/