【发布时间】:2018-08-26 21:32:40
【问题描述】:
如果定义了以下类Foo。据说它重载 一元& (&) 运算符:
class Foo {
public:
Foo* operator&() { return nullptr; }
};
我认为在这种情况下,(不管您可以通过std::addressof() 和其他惯用技巧获取此类对象的地址这一事实)没有办法访问/选择返回的原始一元 & 运算符调用对象的地址,我错了吗?
但是,通过重载,我了解到有一组函数将在编译时根据某些标准选择其中一个。但这种想法似乎与上述情况不符。
为什么它后来被称为重载而不是像重新定义或替换之类的东西?
【问题讨论】:
-
@Zereges 我问的不是获取对象的地址,而是调用原来的
&运算符。 -
与
Foo : public Bar、Bar* x = new Foo、&*x不会使用重载运算符;它没有被覆盖。你需要通过包含它的类型来访问它,所以它被重载了。 -
@Ryan 有趣的观察
-
抱歉,再想一想,这具有误导性。术语很简单:是运算符本身——
&,而不是Foo::operator&——被重载以对特定类型执行不同的操作。int + int、string + string等是+的重载。如果你认为它是ampersand(…)和plus(…, …),它和函数重载是一样的。