2017-11-24 4 views
-3

ここに私の毎日の仕事のコードがあります。我々はこの2を呼び出す場合ここ C++パフォーマンス:オブジェクトvs関数の参照渡し

// 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

"あなたの意見はより効率的ですか?_"この場合はなぜ重要なのですか?それをプロファイリングして、より効率的であるあなた自身のために見てください。 –

+0

独自のプロファイラを作成し、測定します。シンプルなプロファイラを書くのは簡単です – Asesh

答えて

1

効率的には、オブジェクトaPriceを渡すと、アドレスとしてメモリに渡されます。 Compute.cppの内部では、iPriceを使用すると、基本的にはaPriceとその関数が呼び出され、参照と同じ機能が提供されます。

このように、2つの方法にはごくわずかな違いがあります。

0

それは計算だけPriceのために理にかなっている場合は、計算がPriceクラスすなわち

の一部であるべきクラスのデザイン

のより多くの質問だという点では、XY問題のビットのようです

Price::computeAmount(); // reference ivalue directly 

それともComputeクラスにそれを置くことは理にかなって、その場合には、一般的な価値は次のとおりです。

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

Priceが別のクラスに渡されて1つのメンバーだけが引き抜かれるようには思われません。

ほとんどのコンパイラが2つ(またはメンバーを含めると3つ)に相当するため、パフォーマンスは問題ではないようです上記の機能)

関連する問題