2017-10-31 26 views
0

のは、このコードがあるとしましょう:オーバーライドオペレータの戻り値の型=

struct Tester 
{ 
    int value = 0; 
    void operator=(const Tester& original) 
    { 
    value = original.value; 
    } 
}; 

目的=通常の代入演算子のようにそれを使用することです。この関数は、必ずパラメータの "value"をとり、それをホストオブジェクトの "value"に置きます。

Tester& operator=(const Tester& original) 
{ 
    value = original.value; 
    return *this;//edited 
} 

テスターの戻り値の型と参照として:

はしかし、他のプログラマが使用することをお勧めします。最初の関数はまったく同じことを行います。なぜ、どのように役立つでしょうか?

+0

1つの関数呼び出しで値を割り当てるために使用されます。より良いプログラミング実践。 –

答えて

3

最初の関数は

ないかなり正確に同じことをするだろう。あなたが投稿した2番目のバージョンは、returnステートメントを省略しています。だからそれは未定義の振る舞いをしているしかし、それは固定だ後:

Tester& operator=(const Tester& original) 
{ 
    value = original.value; 
    return *this; 
} 

それはチェーンの割り当てに使用することができます。

a = b = c; 

あなたvoidバージョンを使用することはできません何か。

+0

それは完全に意味があります。ありがとう! –