>

C ++에서 참조로 전달이 값으로 전달하는 것보다 비싼 경우가 있습니까? 그렇다면 어떤 경우입니까?

  • 답변 # 1

    값으로 복사하기 (포인트, 컴플렉스) 저렴한 기본 유형 (int, char, float, ...) 및 POD 구조체를 전달하는 것이 좋습니다.

    이것은 참조로 전달할 때 필요한 간접적 인 것보다 효율적입니다.

    부스트 콜 특성을 참조하십시오.

    와이즈 비즈 와이즈 비즈  "최상의"방법을 캡슐화하여 일부 유형 T의 매개 변수를 함수에 전달하거나 함수에서 전달하며 아래 표에 정의 된 typedef 모음으로 구성됩니다.

    The template class 의 목적  '참조에 대한 참조'와 같은 문제가 발생하지 않도록하고 매개 변수가 가장 효율적인 방식으로 전달되도록하는 것입니다.

  • 답변 # 2

    복사 제거 및 RVO에 대한이 기사 "Want speed? Pass by value"를 읽을 수 있습니다 (Return by Value Optimization). 참조는 때때로 컴파일러가 참조를 수행하지 못하게한다고 설명합니다.

  • 답변 # 3

    예, 전달 된 참조 인수에 액세스하려면 전달 된 값 인수보다 더 많은 수준의 간접 성이 필요할 수 있습니다. 또한 인수의 크기가 단일 포인터의 크기보다 작 으면 속도가 느려질 수 있습니다. 물론 컴파일러가 최적화하고 있지 않다고 가정하는 것이 전부입니다.

  • 답변 # 4

    컴파일러는 크기가 동일하거나 크기가 작은 경우 단순히 값으로 전달하는 것에 대한 참조로 기본 유형 전달을 최적화 할 수 있습니다. 참조/포인터. 컴파일러가이 작업을 수행한다고 보장 할 수는 없으므로 원하는 경우 기본 유형을 값으로 전달하십시오. 그러나 템플릿 코드에서는 어쨌든 참조로 전달해야합니다-const 참조를 취하는 벡터의 push_back을 고려하십시오. 정수 벡터가있는 경우 기본 유형에 대한 참조를 전달합니다. 이 경우 컴파일러가 참조를 값으로 대체하여 컴파일러가 최적화하기를 바랍니다. 벡터는 큰 타입을 저장할 수 있기 때문에 const 참조를받는 것이 최선의 선택입니다.

    call_traits<T>

  • 이전 angularjs - firebase admin SDK는 사용자를 생성하고 확인 이메일을 보냅니다
  • 다음 Entity Framework를 사용하여 데이터 새로 고침