int calc(char*, char*);
int calc(char* const, char* const);
為什么這兩個函式的定義是重復定義;
uj5u.com熱心網友回復:
個人理解,char* const ,的引數的型別還是char* 只是引數是const的,所以與char* 重復了,無法避免二義性改成
calc(const char* ,const char*)
uj5u.com熱心網友回復:
多載要求函引數個數或者引數型別有所不同,一眼看來似乎這兩個函式是滿足這個要求的。但是,這兩個函式的引數中的const說明是針對形參的,而函式呼叫是要通過實參來選擇多載函式的:能根據實參型別唯一確定要呼叫的函式,則多載就是正確的無二義性的。以上形參中的const是針對函式體自己的,即在函式體內不能修改形參的值,而對值參傳遞情況下的實參沒有約束:你可以用可寫變數、只讀變數、或者整型常量作實參,實參通過值參傳遞給形參,傳遞時不會改變實參的值,而傳遞后形參與實參無關了,所以形參中的const對實參并無選擇作用,也就是說,對于判斷函式呼叫是否存在二義性沒有任何作用。至于傳完實參之后,在函式體內能否修改形參,與實參也沒有任何關系。多載函式要求的引數型別有所不同,是要求在傳遞實參時能區分實參的型別。如果呼叫時形參型別無法用于區分實參的型別,則對于多載函式必要的可區分性而言無任何意義。參見《C++程式設計精要教程》的傳參傳遞與回傳型別的實作方法。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247368.html
標籤:C++ 語言
下一篇:C語言小白求助很簡單很簡單的問題
