検索

ホームページ  >  に質問  >  本文

C++ 公有方法返回vector与私有vector不是同一个

黄舟黄舟2819日前863

全員に返信(3)返信します

  • 巴扎黑

    巴扎黑2017-04-17 15:31:27

    もちろん、返されたベクトル値は同じアドレスではなく、返された値はコピーされています。
    ポインタと const ポインタを返すことができます。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 15:31:27

    によって返される値はもちろんコピーされます。信じられない場合は、GetcomputerFishes の戻り値を変更して、this->computerFishes のデータが一貫しているかどうかを確認してください。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:31:27

    アドレスが異なるのはなぜですか?

    GetcomputerFishes 関数の戻り値の型は vector<ComputerFish *>、つまり値によって返され、同時に return ステートメントの式は computerFishes であるため、ここでは一時オブジェクトがコピーされ、最初に構築され、その後、一時オブジェクトが返されます (注: コピーの省略により、この一時オブジェクトは実際の実行時にコピーおよび構築されない場合があります)。つまり、返されるオブジェクトは MyClass のメンバー変数ではなく、このメンバー変数をコピーして構築された一時オブジェクトであるため、アドレスが異なります。 (注: 値で呼び出す場合の式の型は右辺値です。ユーザー コードは戻り値のアドレスを直接取得できません。つまり、&x.GetcomputerFishes() はできません。ただし、左辺値に変換してアドレスを取得することはできます。)

    GetcomputerFishes によって返されるオブジェクトをcomputerFishes にする方法は?

    この関数で MyClass のプライベート メンバーのcomputerFishes を返すようにしたい場合は、参照によってそれを返すことができます。

    リーリー

    この関数オーバーロードのセットは、const MyClass オブジェクトと非 const MyClass オブジェクトのサポートをそれぞれ提供します。

    次に、戻り値を使用して参照変数を初期化できます (非参照変数を初期化し、初期化をコピーすることもできます)。

    リーリー

    もちろん、関数の戻り値を介して直接アクセスすることもできます:

    リーリー

    返事
    0
  • キャンセル返事