我的C ++老师认为标准C ++中的*运算符“已经过载”,因为它可能意味着间接或乘法,具体取决于上下文。他从 C ++ Primer Plus 得到了这个,其中说明了:
实际上,许多C ++(和C)运算符已经过载。例如,*运算符在应用于地址时会生成存储在该地址的值。但是将*应用于两个数字会产生值的乘积。 C ++使用操作数的数量和类型来决定要采取的操作。 (第502页,第5版)
至少有一本教科书说的大致相同。据我所知,这不是真的; unary *是与binary *不同的运算符,编译器消除歧义的机制与运算符重载无关。
谁是对的?
答案 0 :(得分:12)
两者都是正确的,因为问题取决于上下文和重载一词的含义。
“重载”可以采用“相同符号,不同含义”的通用含义,并允许使用“*”,包括间接和乘法,以及任何用户定义的行为。
“重载”可用于应用于C ++的官方运算符重载功能,在这种情况下,间接和乘法确实不同。
ADDENDUM :请参阅下面的史蒂夫评论,关于“操作符叠加”的文章“令牌重载”。
答案 1 :(得分:2)
我相信你是。 dereference op和mult。 op是不同的运算符,即使写得一样。同样适用于+, - ,++, - ,以及我可能忘记的任何其他内容。
我认为本书中的这本书将“重载”一词称为“以多种方式使用”,而不是用户。所以你也可以认为这本书是正确的...也取决于你是指*运算符或乘法运算符的重载(例如)。
答案 2 :(得分:1)
在某种意义上它被重载,即在不同的地方使用相同的字符表示不同的东西(例如指针取消引用,int
之间的乘法,与其他内置类型的乘法等)。
通常,“运算符重载”是指使用自定义代码定义运算符(与内置运算符具有相同的符号),以便使用执行一些有趣的操作用户定义的类型。
所以......你们都是对的: - )