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>'
請解釋,它沒有道理給我。
那麼,在這個例子中,這將工作。在我打算用這個地方,我其實是想添加值函數內部的地圖,然後返回一個副本。假設代替該函數是'映射 FUNC(地圖&M){M [3] = 6;返回m; }'。給參數添加const會導致失敗。 –
idWinter
我想我可以做'映射 FUNC(常量地圖&M){地圖毫米=米; mm [3] = 6;返回mm; }'但是這需要額外的不必要的拷貝(mm = m和return mm),而不僅僅是(返回m)。 –
idWinter