이것은 Boost 전문가를위한 것입니다. 그가 들어가기 전에 프로그래머가 알아야 할 세부 사항이나 세부 사항이 있습니까? 예전의 C/C++ 스타일 루프를 모두 희박한 의미의 BOOST_FOREACH
으로 바꾸십시오.C++ 부스트 : BOOST_FOREACH가있는 문제가 있습니까?
은 (이 질문은 부분적으로 here에서 파생됩니다.)
이것은 Boost 전문가를위한 것입니다. 그가 들어가기 전에 프로그래머가 알아야 할 세부 사항이나 세부 사항이 있습니까? 예전의 C/C++ 스타일 루프를 모두 희박한 의미의 BOOST_FOREACH
으로 바꾸십시오.C++ 부스트 : BOOST_FOREACH가있는 문제가 있습니까?
은 (이 질문은 부분적으로 here에서 파생됩니다.)
을 살펴 보자 근거의 이해
이 (foreach.hpp 단위) BOOST_FOREACH 매크로의 소스를 살펴 보자 - 그것은 내가 전화를 "의지와 의미":-)
을 할 게 아니에요의 버그 페이지, 당신은 typenames에 쉼표를 사용할 수 없습니다
BOOST_FOREACH(pair<int,int> A, mapB){}
크로스 플랫폼 제품을 개발 단지의 경우에 Portability 섹션 작동하지 않습니다.
다른 단점으로는 BOOST_FOREACH() documentation을 참조하십시오.
BOOST_FOREACH ((pair
작동하지 않을 것이고, 갑자기 엄격한 매크로가 될 때까지 반나절 동안 그것을 알아 내려고 노력했습니다. 매크로는 템플릿을 이해하지 못하기 때문에 쉼표는 대체 할 또 다른 인수라고 생각합니다 –
'auto'이 (가) 당신의 친구입니다! 'BOOST_FOREACH (auto a, mapB) {...}' – Gabriel
매크로, 나는 매크로를 좋아하지 않으며 STL 알고리즘 + 람다 + 바인드를 선호합니다.
또한 C++0x는 BOOST_FOREACH 비슷한 for-loop 포함됩니다 partialy 죽은 BOOST_FOREACH를 사용하지 않는 대한
는int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
x *= 2;
}
그것은 하나의 추가 이유이다.
사실, 이것이 내가 BOOST_FOREACH를 사용하기 시작한 이유입니다.구문이 유사하기 때문에 C++ 0x 구문을 사용할 수 있으면 간단한 정규식 검색 및 바꾸기 작업으로 코드를 업데이트 할 수 있습니다. – Ferruccio
나는 회의론적이고 매우 회의적이다. tr1은 여전히 모든 곳에서 사용할 수 없으며 오래 전이었습니다. C++ 09가 2020 년까지이 비율로 완전히 사용할 수있을 것입니다. –
예, 일부 사람들은 STL을 사용하지 않으며 2020 년에는 새로운 C++ 0x 기능을 사용하지 않을 것입니다.하지만 사실은 다음에 말합니다 : VC 및 GCC 컴파일러는 이미 일부 C++ 0x 기능을 지원합니다. – bayda
나는 핸드 코딩 루프 대 BOOST_FOREACH
을 프로파일 링했다. BOOST_FOREACH
은 크기가 100,000 인 벡터의 요소를 증가시키는 간단한 루프에서 약 30 % 더 느립니다. 따라서 작은 루프를 코딩하는 경우에는 빠르지 않을 것입니다. 루프가 주요 프로세싱을 수행하면 Amdahl의 법칙이 시작되고 BOOST_FOREACH
으로 인한 손실은 무시할 수 있습니다.
BOOST_FOREACH에 대한 요점 1이 문제입니까? BOOST_FOREACH를 이해하고 각 매개 변수를 한 번만 평가했습니다. 아니? "논평을 한 번만 평가하여 불쾌한 놀라움을 유발하지 않습니다."- doc – Catskul