2017-11-24 1 views
-3

다음은 일상 업무에서 사용되는 코드입니다. 우리는이 두 가지를 호출하는 경우 다음 C++ 성능 : 객체 대 함수의 참조로 전달

// In class Price.hpp 
private: 
bool value = false; 
// others 
std::vector<int> vec; 
... 

public: 
getBoolValue() { return value; } 
setBoolValue(bool iValue) { value = iValue }; 

// a lot of setters & getters for the others 
... 

이 MAIN.CPP에서
// First proposition 
void Compute::computeAmount (const Price & iPrice) { 
    if (iPrice.getBoolValue()) { 
     // do something 
    } 
} 

// Second proposition 
void Compute::computeAmount (const bool iValue) { 
    if (iValue ) { 
     // do something 
    } 
} 

Compute.cpp

다음
// In class Compute.hpp 
// First proposition 
void computeAmount (const Price & iPrice) 

// Second proposition 
void computeAmount (const bool iValue) 

Compute.hpp

입니다 : 여기

클래스 가격입니다 이런 식으로 다른 기능 :

Compute aCompute; 
Price aPrice; 
// Do a lot of set for those two 
.... 

// Discussion 
aCompute.computeAmount (aPrice); 

aCompute.computeAmount (aPrice.getBoolValue()); 

가격이 매우 큽니다. 그래서 우리가 퍼포먼스 (큰 객체의 참조에 의한 전달과 멤버 함수의 반환 값에 의한 전달)에 대해 이야기한다면 어느 쪽이 당신의 의견에 더 효율적인가? 나는 그것이 동일하고 성능 측면에서 차이가 없다고 말할 것입니다.

+0

조치하십시오! – user0042

+2

"당신의 의견에 더 효과적인 사람이 있습니까? _"이 경우에는 왜 _opinions_가 중요합니까? 프로파일 링하고보다 효율적으로 자신 만의 것을보십시오. –

+0

자신의 프로파일 러를 작성하고 측정하십시오. 간단한 프로파일 러를 작성하기 쉽습니다. – Asesh

답변

1

효율성 측면에서 보면 aPrice 개체를 전달하면 메모리로 주소로 전달됩니다. 따라서 Compute.cpp 내부에서 iPrice을 사용하면 기본적으로 aPrice 및 그 함수를 호출하므로 참조와 동일한 기능을 제공합니다.

따라서 두 가지 방법에서 무시할 차이가있을 수 있습니다.

0

이는 더 계산 만 Price에 대한 의미가있는 경우 클래스 디자인

의 문제가 보인다, 계산이 Price 클래스 즉

의 일부가되어야한다는 점에서, XY로의 약간의 문제가 될 것으로 보인다
Price::computeAmount(); // reference ivalue directly 

아니면이 Compute 클래스에 넣어,이 경우 일반적인 가치가있다 만든다 의미 :

Compute::computeAmount(bool ivalue); // use ivalue as a param 

Price이 다른 클래스로 전달되어 하나의 멤버 만 꺼내는 것 같지 않습니다.

대부분의 컴파일러가 두 가지 (또는 멤버를 포함하면 3 가지)를 동등하게 사용하므로 성능이 문제되지 않는 것 같습니다. 위 기능)