참조가 pass-by-value보다 C++에서 더 비싸다는 사례가 있습니까? 그렇다면, 어떻게 될까요?값으로 전달하는 것보다 참조로 전달하는 것
답변
가치가있는 (Point, complex) 값싼 복사 기본 유형 (int, char, float, ...) 및 POD 구조체를 선호하십시오.
이것은 참조로 전달할 때 필요한 간접 참조보다 효율적입니다.
Boost's Call Traits을 참조하십시오.
템플릿 클래스는
call_traits<T>
또는 기능에서 어떤 타입 T의 파라미터를 전달하는 "최적"방법을 캡슐화하고, 아래 표와 같이 정의 형식 정의의 집합으로 이루어져있다.call_traits
의 목적은 "참조에 대한 참조"와 같은 문제가 발생하지 않도록하고 매개 변수가 가능한 가장 효율적으로 전달되도록하는 것입니다.
예, 전달 된 참조 인수에 액세스하려면 전달 된 값 인수보다 더 많은 간접 참조가 필요할 수 있습니다. 게다가 인수의 크기가 단일 포인터의 크기보다 작 으면 속도가 느려질 수 있습니다. 물론 컴파일러가 최적화하지 않는다고 가정합니다.
copy elision 및 RVO (Return by Value Optimization)에 대한 내용은 "Want speed ? Pass by value"입니다. 그것은 종종 컴파일러가 참조를 사용하여 컴파일을 수행하지 못하게한다고 설명합니다.
컴파일러는 형식이 참조/포인터의 크기와 같거나 작은 경우 단순히 값을 전달하여 참조로 원시 형식을 전달할 수 있습니다. 컴파일러가 이것을 보증 할 수는 없으므로 선택이 있다면 값으로 원시 타입을 전달하십시오. 템플릿이 짜여진 코드에서는 어쨌든 참조로 전달해야합니다. 벡터의 push_back은 const 참조를 사용합니다. int의 벡터를 가지고 있다면, 원시 타입에 대한 참조를 전달할 것입니다. 이 상황에서 컴파일러가 참조를 값으로 대체하여 최적화 할 수 있기를 바랍니다. 벡터가 큰 타입을 저장할 수 있기 때문에, const 레퍼런스를 받아들이는 것이 최선의 선택이다.
을 보면 "호출자가 참조를 수정하지 않거나 수정할 수있는 코드를 호출 한 후에 읽을 수있는 한 컴파일러에서 최적화 할 수 있습니다." 물론 그럴 경우에는 "어느 쪽이 옳은가"라는 질문에 "어느 쪽이 옳은가"라는 질문을하지 않으려 고한다. :-) 어색한 것은 컴파일러가 최적화 할 수 있다고 생각하는 경우이지만 실제로는 당신이 어떤 이유를 간과했기 때문에 그것은 참조가되어야합니다 (에일리어싱 규칙은 놀라움의 주요한 원인입니다). –
- 1. 참조로 확인란을 전달하는 방법은 무엇입니까?
- 2. 참조로 int/char 배열을 전달하는 오류/경고
- 3. Objective-C에서 구조체를 (값으로) 전달하는 방법은 무엇입니까?
- 4. C#에서 참조로 속성을 전달하는 방법?
- 5. 스칼라에서 타입 정보를 전달하는 것
- 6. 파일 포인터를 참조로 전달하는 올바른 구문입니까?
- 7. 벡터를 복사하여 참조로 함수에 전달하는 방법은 무엇입니까?
- 8. 참조로 원시 데이터 형식을 전달하는 방법은 무엇입니까?
- 9. Delphi에서 참조로 배열을 전달하는 방법은 무엇입니까?
- 10. 참조로 전달하는 것이 더 나은 이유는 무엇입니까?
- 11. 데이터베이스 문자열을 CheckBox 값으로 전달하는 ASP.Net MVC
- 12. 사전을 다른 사전의 값으로 전달하는 방법은 무엇입니까?
- 13. Java로 값으로 변경 가능한 객체를 전달하는 방법
- 14. "간단한"유형의 값을 참조로 전달하는 것이 가치가 있습니까?
- 15. UITextView에서 다른 ViewController의 문자열을 전달하는 것
- 16. 값을 얻기 위해 속성을 전달하는 것 (표현식처럼)
- 17. 처음부터 끝까지 변수를 전달하는 것 - Paypal
- 18. 인수로 size_t를 전달하는 "효율성"
- 19. C++/CLI에서 함수 변수를 참조로 전달하는 방법은 무엇입니까?
- 20. 파이썬에서 내장 메서드를 래핑하는 방법은 무엇입니까? (또는 '참조로 전달하는 방법')
- 21. JScript에서 참조로 인수를 전달하는 out 인수로 함수 호출
- 22. C++ : enum을 값 또는 const 참조로 전달하는 것이 더 좋습니까?
- 23. 참조로 기본 데이터 형식을 전달하는 속도 이점 C++
- 24. 참조로 호출 할 때 함수에 매개 변수를 전달하는 방법은 무엇입니까?
- 25. 객관적인 C (아이폰)에서 참조로 값을 전달하는 방법
- 26. 그래서 PHP에서 참조로 전달하는 것은 정말로 효과가 있습니까?
- 27. 참조로 관리 배열을 관리되지 않는 라이브러리로 전달하는 방법은 무엇입니까?
- 28. 값으로 변수를 참조로 사용하지 않고
- 29. C++에서 값으로 임시 구조체를 전달하는 간단한 방법은 무엇입니까?
- 30. 자바 스크립트에서 값으로 전달하는 것과 같은 것이 전달되는지?
그렇다면 그의 컴파일러가이를 최적화하는지 어떻게 알 수 있습니까? – Arthur
이진 코드 –