C++中的函數重載通常根據參數類型及個數來實現,但當含有引用參數和非引用參數時會出現一些問題,先見如下代碼:
bool str_equal(string str1 , string str2){
cout<<"str_equal no & no const"<<endl;
return str1.size() == str2.size();
}
bool str_equal(const string str1 , const string str2){
cout<<"str_equal with const no &"<<endl;
return str1.size() == str2.size();
}
這裏,編譯時會報重複定義的錯誤:
[Error] redefinition of 'bool str_equal(std::string, std::string)'
這裏應該都明白在函數調用時無法通過const來選擇函數;但如果形參是引用,則情況會有所變化,請看如下代碼
bool str_equal(string& str1 , string& str2){
cout<<"str_equal with & no const"<<endl;
return str1.size() == str2.size();
}
bool str_equal(const string& str1 , const string& str2){
cout<<"str_equal with const &"<<endl;
return str1.size() == str2.size();
}
像這樣,就能編譯通過,這也說明形參爲引用時,在調用函數可以通過const來選擇
同樣,在形參爲指針時,在調用函數時也可以通過const來選擇