2014-04-09 19 views
0

下面是不會編譯我的示例程序。我想創建一個將地圖作爲可能參數的函數,但如果沒有提供默認的空映射,則會提供一個默認的空映射。非常直截了當,只是不知道爲什麼它不起作用。爲什麼我不能設置<map>類型的函數參數的默認值?

#include <map> 
#include <iostream> 
using std::cout; using std::endl; using std::map; 

int func(map<int, int>& = map<int, int>()); 

int main() { 
    map<int, int> m; 
    m[2] = 4; 

    cout << "func() = " << func() << endl; // "func() = 0" 
    cout << "func(m) = " << func(m) << endl; // "func(m) = 1" 
} 

int func(map<int, int>& m) { return m.size(); } 

編譯器的錯誤,我得到的是:

test.cc:6:42: error: default argument for 'std::map<int, int>& <anonymous>' has type 'std::map<int, int>' 

請解釋,它沒有道理給我。

回答

1

你可以綁定常引用臨時對象。所以該函數可能被聲明爲

int func(const map<int, int>& = map<int, int>()); 
+0

那麼,在這個例子中,這將工作。在我打算用這個地方,我其實是想添加值函數內部的地圖,然後返回一個副本。假設代替該函數是'映射 FUNC(地圖&M){M [3] = 6;返回m; }'。給參數添加const會導致失敗。 – idWinter

+0

我想我可以做'映射 FUNC(常量地圖&M){地圖毫米=米; mm [3] = 6;返回mm; }'但是這需要額外的不必要的拷貝(mm = m和return mm),而不僅僅是(返回m)。 – idWinter

相關問題