2013-02-27 4 views
1

함수에 구조체 정보가 없어도 가능합니까? 이 같은 것이 int f(int x,int y=1)이고 f (2)를 호출하는 것은 괜찮습니다.하지만이 경우 int f(int x,struct my_struct &y) 거기에 참조가 있다고 생각하는 올바른 방법은 무엇입니까?함수 생략 struct

+0

에 오신 것을 환영합니다 : 그럼 당신은 이 바인딩과 같이 임시 객체를 할 수! 나는 네가 무엇을 구하려고하는지 정확하게 이해하지 못한다. 구조체 인수가 기본값을 가질 수 있는지 묻는 중입니까? 또는 참조 인수가 기본값을 가질 수 있는지 묻는 중입니까? 또는 다른 것? –

+0

예. 참조 된 질문에는 수락 된 답변이 없지만 가장 많이 투표 한 질문은 내가 수행 한 답변입니다. –

+0

사실 감사합니다. – siloan

답변

2

참조 번호가 const이 아니므로 임시 개체 인 기본값에 바인딩 할 수 없습니다. 당신은 과 같이 일부 비 임시 개체에 바인딩 수 :

my_struct obj; 
int f(int x, my_struct& y = obj) { 
    // ... 
} 

그러나 이것은 두 번째 인수가없는 f의 모든 호출이 같은 obj에 액세스 할 것이라는 점을 의미 할 것입니다. 그들은 각각 그것을 수정할 수 있고 다음에 다른 상태로 obj을 받게됩니다. 이것은 아주 전형적인 기본값이 아닙니다. 매번 동일한 기본값을 갖기를 기대합니다.

개체를 전달할 수없는 경우 귀하의 함수가 비 const 참조에 의해 개체를 가져 오는 이유는 무엇입니까? 호출자가 개체를 전달하여 수정할 수있게하려면 const 참조를 가져옵니다.

귀하의 y 매개 변수가 const 참조 인 것으로 판단하는 것이 좋습니다. 호출자가 관찰 할 개체를 전달하고 복사하지 않으려는 경우 const 참조를 가져옵니다. 스택 오버플로

int f(int x, const my_struct& y = my_struct(1, 2, "some args")) { 
    // ... 
} 
+0

정확히 내가 필요한 것, 감사합니다! – siloan

+0

@siloan 제 대답이 도움이된다면, 받아 들여 감사를 말하십시오! :) –

+0

ups, 미안하지만 나는 그것을 잊었다. – siloan

관련 문제