Eva*_*per 9 c++ operator-overloading
我的C++老师认为标准C++中的*运算符"已经过载",因为它可能意味着间接或乘法,具体取决于上下文.他从C++ Primer Plus得到了这个,它指出:
实际上,许多C++(和C)运算符已经过载.例如,*运算符在应用于地址时会生成存储在该地址的值.但是将*应用于两个数字会产生值的乘积.C++使用操作数的数量和类型来决定要采取的操作.(第502页,第5版)
至少有一本其他教科书说的大致相同.据我所知,这不是真的; unary*是与binary*不同的运算符,编译器消除歧义的机制与运算符重载无关.
谁是对的?
Ray*_*oal 12
两者都是正确的,因为问题取决于上下文和重载一词的含义.
"重载"可以采用"相同符号,不同含义"的通用含义,并允许"*"的所有使用,包括间接和乘法,以及任何用户定义的行为.
"重载"可用于应用于C++的官方运算符重载功能,在这种情况下,间接和乘法确实不同.
附录:请参阅下面的史蒂夫的评论,关于"操作员覆盖"的" 令牌重载".