C++*运算符"已经超载吗?"

Eva*_*per 9 c++ operator-overloading

我的C++老师认为标准C++中的*运算符"已经过载",因为它可能意味着间接或乘法,具体取决于上下文.他从C++ Primer Plus得到了这个,它指出:

实际上,许多C++(和C)运算符已经过载.例如,*运算符在应用于地址时会生成存储在该地址的值.但是将*应用于两个数字会产生值的乘积.C++使用操作数的数量和类型来决定要采取的操作.(第502页,第5版)

至少有一本其他教科书说的大致相同.据我所知,这不是真的; unary*是与binary*不同的运算符,编译器消除歧义的机制与运算符重载无关.

谁是对的?

Ray*_*oal 12

两者都是正确的,因为问题取决于上下文和重载一词的含义.

"重载"可以采用"相同符号,不同含义"的通用含义,并允许"*"的所有使用,包括间接和乘法,以及任何用户定义的行为.

"重载"可用于应用于C++的官方运算符重载功能,在这种情况下,间接和乘法确实不同.

附录:请参阅下面的史蒂夫的评论,关于"操作员覆盖"的" 令牌重载".

  • 所以即使是"重载"一词也会超载. (15认同)
  • 确切地说,我认为前者意味着它是重载的`*`标记,而不是`*`运算符.这是一个非常精细的分裂,但是,我说它只是因为使用一元`*`的表达式的语法与使用二进制`*`的表达式的语法不同.你可以想象它们都变成了`operator*(...)`,一个参数用于一元,两个用于二进制,在这种情况下,它的行为类似于一个名为`operator*`的重载函数.这并不是标准如何定义算术表达式. (7认同)