2011-08-23 6 views
3

C++ 함수에서 매개 변수의 getter 중 하나를 사용하여 그 뒤에 오는 다른 매개 변수의 기본값을 설정할 수 있습니까? 예를 들어 나는 followig 클래스 푸있는 경우,C++ 함수에서 매개 변수의 getter 중 하나를 사용하여 다른 매개 변수의 값을 설정합니까?

class Foo{ 
    public: 
     setID(); 
     getID(); 
    private: 
     string id; 
} 

는이 같은 기능 fooManipulator, 당신은 기본 인수에 다른 매개 변수를 참조 할 수 없습니다

int fooManipulator(Foo bar, string id = bar.getId()); 
+0

를 또한 참고로 구조를 통과 한 연습을 (값에 의해 통과가 필요하지 않은 경우). 즉'(Foo & bar, string & id) ' – iammilind

답변

3

아니요. 앞에서 설명한 것처럼 함수 인수에 대한 평가 순서는 지정되지 않았습니다.

그러나 이런 과부하 쉽게하는 효과를 얻을 수

int fooManipulator(Foo bar) 
{ 
    return fooManipulator(bar, bar.getId()); 
} 
+0

+1, 좋은 해결책. 왜 "아니오"라고 설명 할 수 있습니다. – iammilind

2

번호를 쓸 수 있기 때문에 평가의 순서 함수 인수는 지정되지 않았습니다.

예를 들어 fooManipulator 함수에서 매개 변수 id에 전달 된 인수는 매개 변수 bar에 인수가 전달되기 전에 평가 될 수 있습니다. 이로 인해 매개 변수 id의 기본 인수에 bar을 사용할 수 없게 될 수 있습니다.

+0

항상 올바른 평가를 받아야하지 않습니까? 왜냐하면이 프로그램을 컴파일하면 사용하기 전에'bar'를 먼저 선언해야합니다 (즉,'bar.getId()'). – iammilind

+0

@ iammilind : 매개 변수가 왼쪽에서 오른쪽 순서로 범위에 들어 있으므로 예 ='bar.getId()'가 허용되었지만'bar'는 매개 변수'bar'를 참조합니다. _Arguments_는 지정되지 않은 순서로 평가됩니다. 'fooManipulator (x, y)'가 주어지면'x' 또는'y'가 먼저 평가되는지 여부는 불특정입니다. –

+0

시간이 많이 물린 나에게 :'int i = 0; printf ("% d, % d", ++ i, ++ i);'일부 컴파일러에서는 0, 1, 일부에서는 1,0이되고 일부는 컴파일러 분위기에 의존합니다. – Dani

관련 문제