C++中的函數重載有關參數爲引用的問題

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來選擇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章