Bil*_*eal 68 c++ operator-overloading
好吧,我受到启发,做了一些冲击.似乎超载operator&导致了不小的痛苦.
重载它有哪些合法案例?
(不能说我曾经那样做过......)
Mar*_*som 52
我似乎记得类似智能指针类的东西,operator&因为它想要返回包含指针的地址而不是智能指针对象的地址.不记得我在哪里看到它或者当时看起来是个好主意.
啊,记得:微软的CComPtr.
编辑:为了概括,在以下条件下可能有意义:
Ste*_*sop 10
重载一元&会使你的对象表现得像一个引用(在这方面).
我很确定尝试提供内置引用的替代方法是一个愚蠢的错误,特别是因为引用在C++中根本不是对象,并且它们没有自己的地址.用户定义类型的实例不可避免地是对象,并且具有地址,即使您禁用获取该地址的常规方法也是如此.所以它永远不是一个完美的模仿.
但是,人们非常热衷于用户定义的指针替代方案,所以我可以看看有人可能想要尝试它.我不确定他们是否会避免创建一种(错误)行为的方式,以使其用户希望他们没有打扰.
四年后,另一个答案.
我看到的另一个用途是当你背驮式C++语言,但定义自己的语义.Prime示例:Boost.Spirit.
Boost.Spirit,特别是用于解析的Qi,重载解析器上的运算符,以提供类似EBNF的语法来指定任意解析器对象.特别是,一元运算&符被重载以提供And-Predicate Parser.
And-Predicate Parser(&a)
描述
句法谓词在评估另一个生产之前断言某个条件语法要满足.类似于语义谓词,eps,句法谓词不消耗任何输入.and-predicate,&a是一个正的句法谓词,只有在其谓词匹配时才返回零长度匹配.
用法示例:
基本前瞻示例:确保最后一个字符是分号,但不要使用它,只需查看下一个字符:
test_phrase_parser("Hello ;", lit("Hello") >> &lit(';'), false);
Run Code Online (Sandbox Code Playgroud)
简而言之,&这里的一元与指针根本没有关系; 它具有适用于Qi解析器对象的特定于域的语义.
我已经在生成LLVM代码的DSL环境中做到了这一点.一个例子将说明.说x和y是值(即类型的对象value).然后表达式x+y将ADD指令发送到某个代码流中.非常明智地,表达式&x发出一个指令来获取地址x.