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>'
설명해주십시오, 그것은 나에게 이해가되지 않습니다.
이 예제에서는 작동합니다. 내가 이것을 사용하고자하는 곳에서 실제로 함수 내부의 맵에 값을 추가하고 복사본을 반환하려고했습니다. 대신 함수가'map func (map & m) {m [3] = 6; m를 돌려 보내라. }'. 매개 변수에 const를 추가하면 실패하게됩니다. –
idWinter
내가 할 수있는'map func (const map & m) {map mm = m; mm [3] = 6; return mm; }'하지만 그냥 m 대신에 불필요한 복사 (mm = m 및 mm 반환)가 필요합니다. –
idWinter