C++ 运算符重载

C++ 运算符重载,c++,C++,可能重复: 运算符[]、->、=不能作为静态函数重载…为什么?因为标准中有这样的规定,所以可以有效地重载 然而,这些决定是在标准化过程开始之前很久做出的,可能主要是由Stroustrup一个人做出的。如果你想知道是什么导致了每个操作员的决策,你应该阅读 原因很多 首先,如果可能的话,这将需要大量的编程专业知识。 其次,运算符重载本身会导致程序可读性低。如果重载基本运算符,可读性会显著下降。 第三,要重载'->'运算符的图像。你为什么要这样做?没有明显的原因。你说的“作为静态函数”是什么意思?你

可能重复:


运算符[]、->、=不能作为静态函数重载…为什么?

因为标准中有这样的规定,所以可以有效地重载

然而,这些决定是在标准化过程开始之前很久做出的,可能主要是由Stroustrup一个人做出的。如果你想知道是什么导致了每个操作员的决策,你应该阅读

原因很多

首先,如果可能的话,这将需要大量的编程专业知识。
其次,运算符重载本身会导致程序可读性低。如果重载基本运算符,可读性会显著下降。

第三,要重载'->'运算符的图像。你为什么要这样做?没有明显的原因。

你说的“作为静态函数”是什么意思?你是说作为自由函数(相对于成员函数)吗?如果使用得当,可读性应该提高,而不是降低。我可以想象至少有两个很好的理由让操作员超负荷工作;迭代器和智能指针。当你凭直觉得到正确答案时,可读性会提高。当你让一个操作员超负荷工作时,你应该时时刻刻记住,它并不像通常那样工作。因此,每次你看到一个操作符时,你都应该问自己一个问题:这一次它是否超载了?如果是根据这些参数做出的决定,那么就根本不允许超载这些操作符。事实上,可以将它们作为成员函数重载,但不能作为自由函数重载。因此,决策并非基于这些论点。@Vlad,操作员就像任何需要负责任的东西一样,在正确的人(流和)手中使用时功能强大且易于理解。当然,在错误的人手中,这将是一场混乱。但不要因为它们被误用而错误地在一份笼统的声明中声称它是“坏的”。鉴于这种心态,我们不妨建议不要开车,因为所有的司机都很糟糕……@Moo Juice:我绝对建议不要开车。我不开车,出租车司机不在C++中写智能指针。每个人都很高兴。请看重复的问题(请参阅对问题的评论),阿尔夫·P·斯坦巴赫(Alf P.Steinbach)很好地回答了这个问题。