Arm*_*yan 22 c++ operator-overloading c++-faq
C++中有4个运算符可以重载但不能作为独立(即非成员,独立)函数重载.这些运营商是:
operator =
operator ()
operator ->
operator []
这个主题完全解释了禁止operator =
成为非成员函数的理由.关于其他三个的任何想法?
Che*_*Alf 19
在原始张贴提到的四个操作员,=
,()
,->
和[]
,必须确实被实现为非静态成员函数(分别由C++ 98§13.5.3/ 1,§13.5.4/ 1,§13.5.5/ 1和§13.5.6/ 1).
Bjarne Stroustrup的理由是,我从之前关于这个问题的辩论中回忆起,保留一些语言的理智,即至少有一些你可以依赖的东西,无论多少人通过定义现有的非成员操作员搞砸了类.
我不确定我是否完全同意限制确实对此有所帮助,但是.
编辑:我咨询了Bjarne Stroustrup(他总是乐于助人)但似乎规则的明显不一致只不过是冻结历史事故的案例.他指出"现在看起来比现在看起来更糟糕了,因为自从制定了超载规则以来我们对左值和参考的规则发生了变化.几年前我试图再次研究这个问题,但是在产生一个问题之前已经没时间了完整的提案."
干杯&hth.,
PS:"C++的设计和演变"一书很适合这类问题,但不幸的是我没有.
归档时间: |
|
查看次数: |
1544 次 |
最近记录: |