C++ 公有方法返回vector与私有vector不是同一个
黄舟
黄舟 2017-04-17 15:29:27
0
3
793
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(3)
巴扎黑

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

いいねを押す +0
左手右手慢动作

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

いいねを押す +0
Peter_Zhu

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

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

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

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

リーリー

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

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

リーリー

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

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!