-3

従ったコードサンプルに違いがある場合は?

ClassTwo ClassTwo::getOwnOne(){
    return *this;
}


 ClassTwo& ClassTwo::getOwnTwo(){
    return *this;
}

従ったコードサンプルに違いがある場合は? 同じですか?

4

5 に答える 5

9
ClassTwo ClassTwo::getOwnOne()

これは、呼び出されたオブジェクトのコピーを返します。

ClassTwo& ClassTwo::getOwnTwo()

これは、呼び出されたオブジェクトへの参照を返します。

結果を使用して新しいオブジェクトを作成する場合、どちらも (多かれ少なかれ) 同じことを行います。

ClassTwo c2a = c2.getOwnOne(); // New object
ClassTwo c2b = c2.getOwnTwo(); // New object too

ただし、それらを使用して参照を初期化する場合は異なります。

ClassTwo const & c2a = c2.getOwnOne(); // New object (lifetime tied to reference)
ClassTwo const & c2b = c2.getOwnTwo(); // Reference to c2

ClassTwo & c2a = c2.getOwnOne(); // ERROR
ClassTwo & c2b = c2.getOwnTwo(); // Reference to c2

3 つ目は、変更可能な参照を一時オブジェクトにバインドできないため、エラーになります。

于 2013-04-17T12:44:14.677 に答える
3

最初のものは をコピー*thisしますが、2 番目のものはコピーしません。

于 2013-04-17T12:43:59.230 に答える
3

それらは同じではありません。最初のものは暗黙的にコピー コンストラクターを呼び出し、オブジェクトのコピーを返します。2番目のものはそれへの参照を返します。

これは、次のようなコピー コンストラクターをクラスに追加することで確認できます (メッセージを表示するだけの役に立たないものです)。

ClassTwo(const ClassTwo& in)
{
  cout << "I am the copy constructor" << endl;
}

メソッドを呼び出すとgetOwnOne()、メッセージが表示されます。うんざりgetOwnTwo()

于 2013-04-17T12:44:23.203 に答える