好吧,我受到启发去做一些头部冲击。似乎超载operator&
会导致不小的痛苦。
存在哪些合理的超载情况?
(不能说我曾经做过...。)
Answers:
一元重载&
使您的对象的行为像一个引用(就此而言)。
我非常确定尝试提供内置引用的替代方法是一种愚蠢的做法,特别是因为在C ++中,引用根本不是对象,并且它们没有自己的地址。用户定义类型的实例不可避免地是对象,并且确实具有地址,即使您禁用了获取该地址的常规方法也是如此。因此,它绝不是完美的模仿。
但是,人们非常热衷于用户定义的指针替代方法,因此我可以看一下有人可能想尝试它的方式。我不确定他们会避免创建一种(错误)行为的类型,该行为会使用户希望他们不会打扰。
四年后,另一个答案。
我看到的另一种用法是当您背负C ++语言但定义了自己的语义时。主要示例:Boost.Spirit。
Boost.Spirit(尤其是用于解析的Qi)使解析器上的运算符重载,以提供类似于EBNF的语法来指定任意解析器对象。特别是,一元运算&
符被重载以提供And-Predicate Parser。
和谓词解析器(&a)
描述
句法谓词断言在评估另一个产生式之前要满足的某些条件语法。类似于语义谓词,eps,句法谓词不消耗任何输入。和谓词&a是一个正则语法谓词,仅当其谓词匹配时才返回零长度匹配。
用法示例:
基本的预读示例:确保最后一个字符是分号,但不要使用它,只需查看下一个字符即可:
test_phrase_parser("Hello ;", lit("Hello") >> &lit(';'), false);
简而言之,&
这里的一元与指针完全没有关系。它具有适用于Qi解析器对象的特定于领域的语义。
曾经我曾经重写过运算符&(在不改变其行为的情况下)作为类的私有对象,以防止偶尔创建指向堆栈中创建的对象的智能指针。仍然不确定这是否真的是个好主意...
您可以重载地址运算符以使其私有。这对于实现某种类型的警棍传递方案可能非常有用,其中警棍的地址无法获取。如果警棍的构造函数是隐藏的,则可以使警棍的范围保持密闭。
std::addressof
存在,所以仍然可以使用该地址。stackoverflow.com/questions/6494591/...