2012-11-06 2 views
2

저는 초기화 프로그램 목록을 처음 사용하고 있으며 다른 stl 컨테이너와 유사한 지 궁금합니다. 그 말은 그들이 가치를 복사하는 것을 의미합니까? 나는 함수를 호출 할 때std :: initializer_list <> 및 참조 매개 변수

template <class T> T& minArgs(const std::initializer_list<T&>& Arguments) 
{ 
    const T* Smallest = Arguments.begin(); 
    for (const T* I = begin(Arguments); I != end(Arguments); ++I) 
    { 
     if (*I < *Smallest) Smallest = I; 
    } 
    return *Smallest; 
} 

그러나 나는 GCC에서이 얻을 : 내가 놀아 봤는데

error: 'const' qualifiers cannot be applied to 'int&' 

을 난 할 노력하고있어이 같은 간단한 분() 함수는 이것은 initializer_lists가 내가 원하는 것을하지 않을 수도 있습니다; 나는 비 -POD 인수를 제외하고 함수를 원한다. va_list가 더 나은 대안이 될 것입니까?

감사합니다.

+0

"* 그러나 함수를 호출 할 때 *"함수가 아닙니다. 그것은 템플릿입니다. 어떻게 인스턴스화합니까? –

+0

죄송합니다. 언급하지 않았습니다. 다음과 같이 호출됩니다. int X = minArgs ({10, 20}); 또한 int & X 시도했지만 동일한 오류가 발생합니다. – user990683

+0

std :: initializer_list는 모두 가치에 관한 것입니다. 또한 값으로 이동하여 이동되도록 (std :: initializer_list 리터럴은 정의에 따라 rvalue 참조) 의미가 있습니다. std :: initializer_list 으로 가져 와서 어떻게되는지보십시오. –

답변

2

시도해 보면 these errors이됩니다. 그러나, 내가 참조하여 무의미 사용 it all works.

std::initializer_list 저장 이 아닌 참조를 제거합니다. 너 const std::initializer_list<T> &, 아니 const std::initializer_list<T&> & 걸릴해야합니다.

All I'm trying to do is write a function that takes any number of arguments, by reference, and returns a reference to the largest of them. [...] Is this possible with initializer_lists?

std::initializer_list하지 참조위한 것이다. 그러나 나는 당신이 참조 대신 값으로 항목을 가져갈 수없는 이유는 없습니다. 또는 더 중요한 것은 std::min, which can take an initializer list을 사용하는 것입니까?

+0

내 "무의미한 참조 사용"은 참조로 POD가 아닌 인수를 모두 전달하는 것이 었습니다. 귀하의 버전에서 클래스를 사용하면 오류가 발생합니다 : 'bool Class :: operator <(const Class &)'의 'this'인수로 'const class'를 전달하면 한정자가 삭제됩니다. [-fpermissive] "Class" 연산자는 "bool operator <(const Class & Other)"로 오버로드됩니다. – user990683

+1

@ user990683 : 실제 문제 *를 빠뜨리면 문제를 진단하기가 다소 어렵습니다. 즉,이 클래스 정의는 당신이 우리에게주지 않은 것입니다. 최소한 오류가 있다고 주장 할 경우 실제로 오류를 볼 수있는 충분한 정보를 제공하십시오. 귀하의 유스 케이스는 귀하의 승인에 의해 * 정수 *입니다. 이제 갑자기 이야기하고 있습니다. 당신이 우리에게 주려고 간과 한'클래스'에 대해서 완전하고 완전한 질문을하면 완전하고 완전한 * 답을 얻을 수 있습니다 *. –

+0

@ user990683 : 당신의 오류에서 당신이'연산자 <'''*'const' *가된다. –

관련 문제