寫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。