我的C++老师认为,在标准的C++中,*运算符已经被“重载”了,因为它可以根据上下文意义表示间接寻址或乘法。他从《C++ Primer Plus》这本书中得到了这个观点,该书指出:
实际上,许多C++(和C)运算符已经被重载了。例如,当将*运算符应用于地址时,会产生存储在该地址处的值。但是,将*应用于两个数字会产生这些值的乘积。C++使用操作数的数量和类型来决定采取哪种操作。(第5版502页)
至少还有一本教材说了同样的话。就我所知,这不是真的;一元的*与二元的*是不同的运算符,编译器消除歧义的机制与运算符重载无关。
谁是正确的?
实际上,许多C++(和C)运算符已经被重载了。例如,当将*运算符应用于地址时,会产生存储在该地址处的值。但是,将*应用于两个数字会产生这些值的乘积。C++使用操作数的数量和类型来决定采取哪种操作。(第5版502页)
至少还有一本教材说了同样的话。就我所知,这不是真的;一元的*与二元的*是不同的运算符,编译器消除歧义的机制与运算符重载无关。
谁是正确的?
*
运算符(这是英语意义上的“重载”,但不是 C++ 的重载),内置二元*
运算符实际上在 C++ 意义上也是重载的,因为它适用于不同类型的int
、double
等,具有不同的效果。有效重载集合以运算符重载决议目的在标准中定义,位于第13.6/12节。同样,对于每种指针类型(13.6/6)和函数指针类型(/7),一元*
也被有效地重载了。 - Steve Jessop