2017-01-01 2 views
1

私はconst参照線量リレーで何かを保存して戻ってくるとこのような状況がありますが、この関数は何百回も呼び出されることがあります。C++のconst参照で返されます。ここでは、受信側関数のコピーで値がそれに相当しますか?

は私が持っている:で

int x = 0; 
class Foo { 
... 
.... 
Mo mo; 
void Foo::setInt(float scaleX) 
{ 

    x = mo.doSomthing().toInt(); 
    //x is class member which other functions are using it 

} 
... 
... 
.. 
} 

:D oSomthing().toInt()を呼び出す

Val Mo::doSomthing() 
{ 
    Val v(444444); 
    return v; 
} 

:const参照として番号を取得することを

struct Val 
{ 
public: 
    Val(int& v) 
    { 
     iVal = v; 
    } 

    const int& toInt() 
    { 
     return iVal; 
    } 

private: 
    int iVal; 
}; 

機能をintを返し
一般的なコンテナをこの場合には何らかの理由がありますいくつかのビットを保存するためにconst参照を使用するために?

+4

参照によって基本型を返すことは、不要なオーバーヘッドのようなものです。実際には、2つのコピーは、単一のコピーとconst参照より安いかもしれません。しかし、確実に知るための唯一の方法は、きついループをプロファイルすることです。 – StoryTeller

+5

早すぎる最適化についてお読みください。一般的には** measure **です。 –

+1

最初の質問:このループは、プログラム操作の典型的な時間に数十億回実行されますか?答えが「複数」でない場合は、ここで時間を無駄にしています。これらの種類の操作は、現代のプロセッサでは愚かです。ベンチマークの場合、意味のあるデータを得るために数百万回以上のサイクルを実行する必要がある場合は、驚くことはありません。 – tadman

答えて

1

一般に、スカラー型の場合、それらを値で返すほうが安いです。参照(およびポインタ)は通常のスカラー型と同じサイズ(語長)に近い。 int &を返すと、同じ量のデータが返されますが、参照されたデータにアクセスすると、実行中のプラットフォームは参照を解決する必要があります(参照されたメモリにアクセスする)。

しかし、これまでのコメントは正しいです。最初に測定してください。これは、マイクロ最適化の一種です。

+1

"PODタイプ"の代わりに "組み込みタイプ"と言ってください。 – HolyBlackCat

+0

あなたは絶対に正しいです。私の考えでは、PODは組み込み型と非常に小さな構造体ですが、POD型の定義はより広いです。私は自分の答えを修正した。 – Broothy

関連する問題