2017-05-23 1 views
0

해당 변수를 여러 번 사용하려면 개체 멤버 변수의 로컬 변수를 유지해야합니까? 이렇게하면 필요하지 않을 수도 있지만, Getter 호출 수가 줄어 듭니다.개체 멤버 변수의 로컬 복사본 유지

Ex.

void Foo(Bar b){ 
    if(b.Dodos() == "skimpy") 
    cout << "These Dodos are " << b.Dodos() << endl; 
} 

는 지역 변수를 유지하기 위해 많은 차이를 만드는가, 코드가 복잡하고 b.Dodos() 여러 번이라고 가정하면? 즉 string bd = b.Dodos()? 특히 getter가 멤버 변수를 반환한다는 것을 합리적으로 추측/알 수 있다면?

다음 가능성이 그 결과를 할당에서 어떤 혜택을받지 않습니다, 멤버 함수는 단지 멤버 변수를 반환하는 경우

+1

시도해보십시오. –

+0

흠 .. 그러니 시험 해보는 것보다 ~ 정답이 거의 없다 구요? – xcorat

+0

표준은 성능 (컨테이너의 알고리즘 복잡성 요구 사항 제외)에 관해서는 아무 것도 말하지 않습니다. –

답변

1

(이 여러 번 요청했다,하지만 난 대답을 찾을 수없는 가정) 지역 변수, 특히 inlining을 사용하는 경우 멤버 함수가 많은 작업을 수행하면 로컬 함수 복사본을 유지하면 성능이 크게 향상 될 수 있습니다. 그러나이 기능이 pure 인 경우에만 올바르게 작동합니다. 즉, 동일한 인수를 사용하여 호출 할 때 항상 동일한 값을 반환하면됩니다. 함수가 순수하고 값 비싸며 둘 이상의 다른 함수에서 호출되는 경우 memoization 기법을 사용해보십시오. 이렇게하면 동일한 매개 변수로 함수를 호출 할 경우 후속 호출에 값 비싼 계산 대신 조회 만 포함됩니다.

효율성 외에 어떤 전략이 DRY 원칙에 가장 잘 부합하는지 또는 변수를 할당하면 코드를 읽는 다음 사람 (향후에있을 수 있음)에게 의도를 나타낼 수 있는지 고려해야합니다. 예를 들어, 동일한 인수를 여러 번 사용하여 함수를 호출하는 경우 인수가 동일하다는 것이 우연인지 물어보십시오. 변경이 필요한 경우 해당 변경이 모든 통화에 동일한 방식으로 적용됩니까? 아니면 통화가 다르게 영향을 미칠 수 있습니까? 호출이 모두 변경되면 변수에 할당하면 유지 관리에 도움이되지만 변수가 독립적으로 변경되면 유지 관리가 더 어려워집니다.