1. ホーム
  2. c++

[解決済み】C++の戻り値、参照、const参照

2022-01-31 10:49:53

質問

戻り値、値への参照、値への const 参照の違いについて教えてください。

値です。

Vector2D operator += (const Vector2D& vector)
{
    this->x += vector.x;
    this->y += vector.y;
    return *this;
}

Not-const referenceです。

Vector2D& operator += (const Vector2D& vector)
{
    this->x += vector.x;
    this->y += vector.y;
    return *this;
}

Constの参照。

const Vector2D& operator += (const Vector2D& vector)
{
    this->x += vector.x;
    this->y += vector.y;
    return *this;
}

これの利点は何でしょうか?関数にconst参照を渡すことの意味は、関数内で参照が指している値を変更しないようにしたいので、理解できます。しかし、const リファレンスを返すことの意味がよくわかりません。なぜ参照を返すことが値を返すことよりも良いのか、なぜ const 参照を返すことが not-const 参照を返すことよりも良いのでしょうか?

どのように解決するのですか?

などと変なことを書かない限り、違いはありません。

(v1 += v2) = v3;

最初のケースでは、割り当てが一時的なものになり、全体の効果は次のようになります。 v1 += v2 .

2つ目のケースでは、割り当て先が v1 ということで、全体の効果としては v1 = v3 .

3番目のケースでは、代入は許可されません。このような奇妙なことはほぼ間違いなく間違いなので、これはおそらく最良の選択肢でしょう。

なぜ値を返すより参照を返す方が良いのですか?

オブジェクトのコピーを作成する必要がないため、より効率的である可能性があります。

<ブロッククオート

また、なぜ const 参照を返す方が not-const 参照を返すよりも良いのでしょうか?

上記の例のような奇妙な連鎖を防ぎつつ、以下のような奇妙でない連鎖を可能にします。

v1 = (v2 += v3);

しかし、コメントにあるように、それはあなたの型が組み込み型と同じ形式の(ab)使用をサポートしないことを意味し、それを望ましいと考える人もいます。