c++ - 为什么叫运算符重载呢?

标签 c++ c++11

如果定义了以下类 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/

相关文章:

c++ - Bullet Physics - 在 body 的局部空间中应用扭矩脉冲

c++ - 如何通过 Qt 创建 Web 服务

c++ - 在 IBM i 系列上为 std::map 使用自定义比较器

c++ - 为什么调用已删除的对象成员后没有错误?

c++ - 模板类的模板 friend 的问题

c++ - for 循环中的 static_cast

c++ - 将 std::function 转换为不同的 std::function 并调用它?

c++ - 仅在 void* typedef 中被忽略的限定词

c++ - 您是否可以使用 std::aligned_union 违反严格的别名规则

c++ - std::forward 与 std::move 的用法