C++ 문자열을 참조로 전달할 때보 다 효율적으로 사용할 수있을만큼 작게 간주하는지 궁금합니다. 참조로C++ 문자열을 값 또는 참조로 전달
답변
호 패스를 : 일반적
void foo(const std::string& pString);
, 그들이 비 단순 복사 생성자가 그렇지 않은 경우에 의해 값에 의해 참조 것을 전달한다.
문자열은 일반적으로 데이터에 대한 포인터와 길이 카운터로 구성됩니다. 그것은 구현이 정의 되었기 때문에 더 많거나 적게 포함될 수 있지만 구현시 하나의 포인터 만 사용하는 것은 거의 없습니다.
템플릿 코드에서 컴파일러는 함수의 정의를 사용할 수 있으므로 const T&
을 사용할 수도 있습니다. 즉, 참조가되어야하는지 또는 그렇지 않은지를 결정할 수 있습니다. (제 생각 엔)
당신의 휴리스틱은'double'과'long double' (일반적으로 값으로 전달되는 것이 더 낫습니다)에서 작동하지 않습니다. 또한 단일 인수 함수의 경우 레지스터가 두 부분을 저장하고 여분의 간접 참조를 저장하는 데 사용되므로 일반적으로 2 x 기계어 UDT를 값으로 전달하는 것이 좋습니다. –
또한'sizeof (T)'는 복사 될 데이터의 실제 크기를 측정하지 않기 때문에 일반적으로 매우 좋지 않은 척도입니다. 'string'은 특히 좋은 예입니다. 'sizeof (string)'는 순진한 구현 (데이터에 대한 간단한 포인터)에서 보통 sizeof (void *)이거나 짧은 문자열 최적화에서 2-3 단어입니다. 이행. 그러나 문자열을 복사하면 복사 생성자가 가리키는 데이터를 복사합니다. 이는 설명되지 않은 것입니다. 같은 것은'vector'와 다른 많은 것들에 사용됩니다. –
어때요? – GManNickG
확실히 아닙니다. 특정 구현에 쓰기시 복사 (copy-on-write) 의미가 없으면 (요즘은 쓰레딩 문제로 인해 희귀합니다.) 실제 문자열 데이터가 힙에 저장되어 있어도 전체 문자열을 값으로 전달하면 전체 문자열을 복사해야합니다. 문자열 객체 자체가 내부적으로 몇 개의 포인터 일지라도 복사 할 데이터의 양은 문자열의 길이에 선형입니다.
- 1. 열거 형을 값 또는 참조로 전달 하시겠습니까?
- 2. RWCString - 값 또는 const 참조로 전달
- 3. RMI : 값 또는 참조로 전달 하시겠습니까?
- 4. java - 참조로 double 값 전달
- 5. C++ 참조로 개체 전달?
- 6. C 참조로 구조체 전달
- 7. PHP의 객체가 값 또는 참조로 전달 되었습니까? 이 코드
- 8. 값 또는 참조로 반환 하시겠습니까?
- 9. LocalConnection은 값 또는 참조로 전달합니까?
- 10. C++ : enum을 값 또는 const 참조로 전달하는 것이 더 좋습니까?
- 11. 자바에서 참조로 전달
- 12. 참조로 함수에 char ** 전달
- 13. 참조로 배열 전달
- 14. C++ 문자열을 파이썬에 전달
- 15. VB.Net에서 참조로 전달
- 16. 참조로 정수 전달
- 17. PHP 함수, 값 또는 참조로 반환 하시겠습니까?
- 18. 스키마 R5RS : 참조로 전달
- 19. 참조로 전달 TCL - 스레딩?
- 20. 참조로 전달/저장 하시겠습니까?
- 21. AS3에서 참조로 전달
- 22. 참조로 전달 된 값을 멤버 변수에 전달 (C++)
- 23. PHP로 참조로 데이터베이스 연결 전달
- 24. 쿼리 문자열을 통해 여러 값 전달?
- 25. 구조체 배열을 참조로 함수 전달
- 26. 변수를 참조로 PHP 확장자로 전달
- 27. 참조로 자바 스크립트 전달 변수
- 28. 여러 함수를 통해 참조로 전달
- 29. SSIS에 값 전달 C#에서 연결 문자열
- 30. C++에서 참조로 포인터 전달 및 기본값 할당
왜? 즉,이 지식으로 무엇을 성취하기를 희망합니까? – wallyk
가능한 복제본 : http://stackoverflow.com/questions/1567138/const-t-arg-vs-t-arg –
시간 여행이 포함되어 있지만 지금은 [이 날짜가 const std :: string &를 매개 변수로 전달하는 방법?] (https://stackoverflow.com/questions/10231349/are-the-days-of-passing-const-stdstring-as-a-parameter-over), 이것은 현대 C++의 관점에서이 질문에 대한 표준적인 논의입니다. –