-5

値/ポインター/参照による受け渡しについて、一度だけ明確にする必要があります。

次のような変数がある場合

int SomeInt = 10;

そして、それを次のような関数に渡したい

void DoSomething(int Integer)
{
    Integer = 1;
}

私の現在のシナリオでは、SomeInt を DoSomething() に渡すときに、DoSomething() 内で何を行ったかに基づいて SomeInt の値を更新し、メモリとパフォーマンスを最も効率的にしたいので、変数をコピーしませんか? . そうは言っても、次のプロトタイプのどれがこのタスクを達成するでしょうか?

void DoSomething(int* Integer);
void DoSomething(int& Integer);

実際に変数を関数に渡すにはどうすればよいですか? 前の 2 つのプロトタイプの違いは何ですか?

最後に、クラス内で関数を使用する場合

class SomeClass
{
    int MyInteger;

public:
    void ChangeValue(int& NewValue)
    {
        MyInteger = NewValue;
    }
};

整数を ChangeValue に渡すと、渡した整数が削除されたときに、クラス内から MyInteger を使用しようとすると使用できなくなりますか?

お時間をいただきありがとうございます。これが基本的な質問であることは承知していますが、何度も出くわす説明が私をさらに混乱させます。

4

4 に答える 4

4

あなたの例の両方

void DoSomething(int* Integer);
void DoSomething(int& Integer);

タスクを達成します。最初のケース - ポインタを使用 - で関数を呼び出す必要がありDoSomething(&SomeInt);、2 番目のケース - 参照を使用 - 次のように単純です。DoSomething(SomeInt);

推奨される方法は、十分な場合は参照を使用し、必要な場合にのみポインターを使用することです。

于 2014-07-17T09:12:05.990 に答える
0

すでに述べたように、両方を使用できます。の利点

void DoSomething(int* Integer)
{
  *Integer=0xDEADBEEF;
}
DoSomething(&myvariable);

パターンは、 myvariable が変更される可能性があることが呼び出しから明らかになるということです。

の利点

void DoSomething(int& Integer)
{
  Integer=0xDEADBEEF;
}
DoSomething(myvariable);

パターンは、DoSomething のコードが少しクリーンであり、DoSomething の方が悪い方法でメモリをいじるのが難しく、そこからより良いコードが得られる可能性があるということです。欠点は、呼び出しを読んでも myvariable が変更される可能性があることがすぐにはわからないことです。

于 2014-07-17T09:19:46.227 に答える