C++——將map作爲形參傳遞時,能使用常量引用嗎?

寫C++的時候有一個好習慣:寫函數的時候,如果確定自己在函數內不會對某個形參進行改變,則應將其聲明爲常量應用類型。

這是因爲引用類型的傳遞速度較快,只需要傳遞一個地址指針。如果不使用引用類型,則在調用函數的時候會使用拷貝函數將形參複製爲實參的值,實在是比較慢了。

而加上const關鍵字是爲了防止自己一不小心在函數內部對該形參進行了更改。

考慮如下代碼: 

void test(const unordered_map<int,int> &um){
  if(um[1]){
    //一段測試代碼
  }
}

上述代碼將不能通過編譯。

原因:map的[]運算符會在索引項不存在的時候自動創建一個對象,而常量不能改變。

解決辦法:使用迭代器替換即可,如下例所示。

void test(const unordered_map<int,int> &um) {
	unordered_map<int, int>::const_iterator it = um.begin();
	for (; it != um.end(); ++it) {
		//balabala
	}
}

注意:

因爲傳入的um參數是常量類型的,因此um.begin()也是常量指針,因此只能將其賦值給常量指針const_iterator。

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