我的C++老師認爲標準C++中的*運算符「已經過載」,因爲它可能意味着間接或乘法取決於上下文。C++ *運算符是否「已經超載?」
實際上,許多C++(和C)運營商已經在超負荷:他從C++的Primer Plus,其中指出了這一點。例如,*運算符應用於地址時,會生成存儲在該地址的值。但是,將*應用於兩個數字會得到這些值的乘積。 C++使用操作數的數量和類型來決定採取哪種操作。 (第502頁,第5版)
至少有一本其他教科書說的差不多。據我所知,這不是事實;一元*是與二進制*不同的運算符,編譯器消除歧義的機制與運算符重載無關。
誰是對的?
你是對的。從某種意義上說,公平地說,內建的運營商已經根據他們的觀點採取了多態的行爲。這是靜態多態性 – sehe
請注意,除了存在兩個'*'運算符(在英語意義上「超載」而不是在C++意義上),內建二進制'*'實際上也在C++意義上被重載,它適用於不同的類型 - 「int」,「double」等 - 具有不同的效果。用於操作員重載分辨率的一組有效過載在標準中定義爲13.6/12。同樣,對於每個指針類型(13.6/6)和函數指針類型(/ 7),一元'*'都有效地被重載。 –