2012-11-27 7 views
6

반복기를 사용하여 컨테이너에서 요소를 삭제하는 방법을 게시물에서 발견했습니다. 반복하는 동안 :자동 변수 및 유형

for(auto it = translationEvents.begin(); it != translationEvents.end();) 
    { 
     auto next = it; 
     ++next; // get the next element 
     it->second(this); // process (and maybe delete) the current element 
     it = next; // skip to the next element 
    } 

autoauto next = it;의 유형없이 사용?

저는 C++ 11이 아닌 VS10을 사용합니다!

+0

[C++ 11 형식 유추] 참조 (http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference) – juanchopanza

+5

VS10은 기본적으로 C++ 11을 사용합니다. 그래서 C++ 11을 사용합니다. –

답변

12

auto은 C++ 11에서 이전과는 다른 의미를 갖습니다. 이전 표준에서는 auto이 자동 저장 기간에 대한 저장 지정자였습니다. 개체의 범위 끝에서 개체가 삭제되는 일반적인 저장소입니다. C++ 11에서는 변수의 유형 공제에 auto 키워드가 사용됩니다. 변수의 유형은 템플릿 매개 변수가 템플릿 함수의 인수 유형에서 추론 될 수있는 것과 같은 방식으로 초기화하는 데 사용되는 표현식에서 추론됩니다.

이 유형 공제는 못생긴 긴 유형을 입력 할 때 유용하지 않습니다. 종종 유형은 초기화 프로그램에서 분명합니다.

VC10에서 많은 C++ 11 기능이 기본적으로 지원되며 auto이 그 중 하나입니다.이 기능은 유형이 템플릿의 인스턴스화에 따라 달라질 수있는 변수에도 유용합니다.

+0

무엇? vC++ 2010에서 지원됩니까? 나는 그것을 모른다. –

+0

자동차가 더 이상 저장 기간을 처리하지 않는다는 의미인가, 아니면 단지 그것이하는 일이 증가 했는가? – MrMesees

4

컴파일러가 실제 유형이 무엇인지 추측 할 수 있기 때문에 반복적 인 반복자 표기법을 피할 수있게 해주는 최신 버전의 C++에서는 짧은 편입니다.

2

자세한 내용은 Type Inference을 참조하십시오 (this question 참조). C++ 11의 새로운 기능으로, 길고 불필요한 코드를 단순화하기위한 것입니다. 특히 이터레이터와 함수 바인딩의 경우 더욱 그렇습니다.

2

이것을 type inference이라고합니다. 자동 변수의 유형은 이니셜 라이저의 유형에 의해 추론됩니다.

예를 들어 크고 복잡한 템플릿 유형의 경우 입력하는 양이 줄어 듭니다.