2010-02-16 5 views
4

BOOST_FOREACH을 사용할 때 다음 코드가 안전합니까?BOOST_FOREACH 사용법을 수정 하시겠습니까?

BOOST_FOREACH (const std::string& str, getStrings()) 
{ 
    ... 
} 

... 

std::vector<std::string> getStrings() 
{ 
    std::vector<std::string> strings; 
    strings.push_back("Foo"); 
    ... 
    return strings; 
} 

또는 내가 BOOST_FOREACH를 호출 전에 용기 의 사본을 잡아해야, 예컨대 : 첫 번째 예에서

const std::vector<std::string> strings = getString(); 
BOOST_FOREACH (const std::string& str, strings) 
{ 
    ... 
} 

BOOST_FOREACHgetStrings() 여러 번 호출 끝낼 수있는 위험이 있습니다?

답변

14

그리고 BOOST_FOREACH는 매크로이지만 이지만 상당히 잘 작동합니다. 그것은 당신이 일을 통과 할 때마다 당신은 간결한 방식으로, BOOST_FOREACH를 사용할 수없는 불쾌한 놀라움

+0

간결하면서도 인상적인 대답입니다! (+1, 물론) –

+1

그것은 그들의 설명서에서 인용구입니다 :) –

1

로 이어지는 정확히 번 인수를 평가합니다. BOOST_FOREACH를 사용하여 자신의 클래스를 트래버스하는 Boost.Range를 고려하십시오.

나는 for 문, 반복자 (선언시 초기화 등) 내가만큼 내가 할 수있는 부스트 람다 표현식 (접착제)와 STL 알고리즘 (cogweels)를 사용 와 코드의 오염을 방지하기 위해 BOOST_FOREACH를 사용합니다. 그것은 코드를 커스텀 루프보다 이해하기 쉽게 만든다.

관련 문제