는 일반적인 적분 함수를 비교하여 대 값에 의해 펑 객체를 전달 ? STL은 첫 번째 접근법 (값으로 전달)을 사용합니다. 가장 보편적 인 방법입니다. 무료 함수 이름은 L- 할 수 없기 때문에참조 (C++)
상황을 감안할 때참조 (C++)
답변
함수 객체는 일반적으로 작아야하므로 값으로 전달하면 성능이 눈에 띄게 떨어질 것이라고 생각합니다 (함수가 본문에서 수행하는 작업과 비교해보십시오). 값별로 전달하면 코드 분석에서 얻을 수 있습니다. by 값 매개 변수는 함수의 지역적이며 최적화 프로그램은 펑터의 데이터 멤버에서로드를 생략 할 수있는시기를 알려줄 수 있습니다.
functor가 stateless 인 경우 인수로 전달하면 아무런 비용도 들지 않습니다. functor가 가져 오는 패딩 바이트에는 (적어도 GCC에서 사용되는 Itanium Abi에서는) 특정 값이 필요하지 않습니다. 참조를 사용할 때 항상 주소를 전달해야합니다.
마지막 함수 (const T&
)는 C++ 03에서는 함수 유형에 const
을 적용하려고하면 C++ 03에서 프로그램이 잘못 작성되어서 C++ 03에서 원시 함수로 작동하지 않는다는 단점이 있습니다. (그리고 SFINAE 사례입니다). 최근 구현에서는 함수 유형에 적용 할 때 const
을 무시합니다.
두 번째 것 (T&
)에는 일시적인 펑터를 전달할 수 없다는 단점이 있습니다.
간단히 말해서, 구체적인 경우 명확한 이점이없는 한 일반적으로 값으로 전달합니다.
, F는
이제 "호출 객체"(무료 함수 또는 정의 된 연산자()를 갖는 클래스 같은) 될 것으로 예상된다 두 번째 버전은 적합하지 않습니다. 세 번째는 F :: operator()가 const가 될 것이라고 가정합니다 (F의 상태를 변경해야하는 경우는 아닐 수도 있음) 첫 번째는 "자체 복사본"에서 작동하지만 F는 복사 할 수 있어야합니다.
세 가지 중 어느 것도 "보편적"이지만 가장 일반적인 경우는 가장 일반적입니다.
STL은 첫 번째 방법 (값 통과) 물론
는 표준 라이브러리 값과 반복자 펑 패스를 사용한다. 복사가 싼 것이 옳다고 (잘못되었거나 잘못) 추측되며 이는 복사하는 데 비용이 많이 드는 반복기 나 펑터를 작성하면 나중에 최적화 할 방법을 찾아야 할 수도 있음을 의미합니다.
그러나 이것은 표준 라이브러리가 펑터를 사용하는 목적을위한 것입니다. 대부분 이것들은 술어입니다. 다만, std::transform
과 같은 것도 있습니다. 만약 당신이 함수를 통합한다면, 그것은 어떤 종류의 수학 라이브러리를 제안합니다.이 경우 많은 국가를 가지고있는 함수를 다룰 가능성이 훨씬 더 높을 것이라고 생각합니다. 예를 들어 n + 1 계수를 비 정적 데이터 멤버로 사용하여 n 차 다항식을 나타내는 클래스를 만들 수 있습니다.
그런 경우에는 const 참조가 더 나을 수도 있습니다. 그러한 펑터를 transform
과 같은 표준 알고리즘으로 사용하는 경우 포인터를 통해 간접적 인 작업을 수행하는 작은 클래스로 포장하여 저렴한 비용으로 복사 할 수 있습니다.
비 const 참조를 취하는 것은 일시적으로 전달되는 것을 중지하기 때문에 사용자에게 잠재적으로 짜증이납니다.
- 1. C 참조
- 2. C++ 참조()
- 3. 이맥스 C C++ 참조 문서
- 4. C++ 참조 및 참조 매개 변수
- 5. C# 자동 참조 할당 - 만들기 참조 null
- 6. C# 참조 문제
- 7. C++ : 참조 주소는 무엇입니까?
- 8. C++ 라이브러리 참조
- 9. C++ const 참조 선언
- 10. C++ 참조 변수 설명
- 11. C++ dll에 대한 참조
- 12. 순환 참조 해결 (C#)
- 13. Const 참조 - C++
- 14. C 트리플 역 참조
- 15. C 정의되지 않은 참조
- 16. C 포인터 참조
- 17. C++ 기호 참조 오류
- 18. 중복 참조 오류 (C#)
- 19. C++ 참조/포인터
- 20. C++에서 참조 반환
- 21. C++ 정의되지 않은 참조
- 22. 순환 참조, 목표 - C
- 23. C 참조. 오류
- 24. C++ 참조, 주소, 포인터는
- 25. C 정의되지 않은 참조
- 26. objective-c 복잡성 참조
- 27. C# 데스크톱 참조
- 28. C++ 참조 구문
- 29. C# 상호 참조 목록
- 30. C++ const 참조 전달
STL은 일반적으로 참조 컨테이너 등을 사용할 때 많은 문제가 발생하기 때문에 일반적으로 첫 번째 방법을 사용합니다. –
다른 모든 것과 동일합니다. 'F'가 무엇인지에 따라 이러한 버전의 범위는 매우 다를 수 있습니다. 'F'가 상태 저장 인 경우 중간 버전 만 가능할 수 있습니다. –
기본적으로 사용자는 원하는 형식을 선택하여 사용자에게 요구 사항을 적용합니다. 가치에 의한 것이라면 무결성을 잃지 않고 복사 할 수있는 펑터를 제공해야합니다. 참고로, 당신은 당신이 그것을 두는 어떤 사용자든지에 적합한 일생에 무언가를 줄 것을 요구하고있다. – Mordachai