2014-04-09 2 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

이 예제에서는 작동합니다. 내가 이것을 사용하고자하는 곳에서 실제로 함수 내부의 맵에 값을 추가하고 복사본을 반환하려고했습니다. 대신 함수가'map func (map & m) {m [3] = 6; m를 돌려 보내라. }'. 매개 변수에 const를 추가하면 실패하게됩니다. – idWinter

+0

내가 할 수있는'map func (const map & m) {map mm = m; mm [3] = 6; return mm; }'하지만 그냥 m 대신에 불필요한 복사 (mm = m 및 mm 반환)가 필요합니다. – idWinter

관련 문제