为什么称为运算符重载?

眠りネ*_*ネロク 3 c++ c++11

如果Foo定义了以下类.据说它重载一元的ampersand(&)运算符:

class Foo {
public:
   Foo* operator&() { return nullptr; }
};
Run Code Online (Sandbox Code Playgroud)

我认为在这种情况下,(无论你是否可以通过std::addressof()其他惯用技巧获取此类对象的地址这一事实),无法访问/选择原始的一元&符运算符,该运算符返回被调用对象的地址我错了吗?

但是,通过重载,我知道有一组函数,在编译时根据某些标准选择一个函数.但这种想法似乎与上述情况不符.

为什么它被称为重载而不是重新定义替换的其他东西?

mel*_*ene 7

请考虑以下代码:

int x;
Foo y;
&x; // built-in functionality
&y; // y.operator&();
Run Code Online (Sandbox Code Playgroud)

我们有两个不同类型的变量.我们&对它们都应用相同的运算符.因为x它使用内置的地址运算符,而y它调用用户定义的函数.

这正是你所描述的重载:有多个函数(好吧,其中一个是内置函数,而不是真正的"函数"),它们是根据操作数的类型选择的.