6

重複の可能性:
C ++のポインター変数と参照変数の違いは何ですか?

たとえば、同じことを行う2つの関数があります。

int func(int &a)
{
   return a+1;
}

int func2(int *a)
{
   return *a+1;
}

これらの関数のいずれかを呼び出すときに、func2よりもfuncを使用する利点は何ですか?

4

4 に答える 4

13
  • 参照にnullを直接割り当てることはできませんが、ポインターに割り当てることはできます。
  • 参照を再割り当てして他の何かを指すようにすることはできませんが、ポインターを再割り当てすることはできます。

これらは両方とも、状況に応じて長所または短所になる可能性があります。

于 2012-04-28T01:58:54.640 に答える
3

あなたの機能は両方とも間違っています。渡された引数を変更しないため、次のように const として受け取る必要があります。

int func(const int &a)
{
    return a+1;
}

int func2(const int *a)
{
    return *a+1;
}

これが参照の利点です。参照バージョンに右辺値を渡すことができます。

func(10);
func(func(func(10)));

ポインターバージョンではそれができません。

于 2012-04-28T02:20:41.253 に答える
1

ポインターはより柔軟で、次のように宣言で事前定義することもできます。

 int func2(int *a = nullptr);

これは単純なケースでは機能しませんが、他の多くのケースでは機能します。

ポインターは、リストへの保存、タイプキャストなど、他のことにも簡単に使用できます。

はい、参照を再割り当てすることはできません。

于 2012-04-28T02:03:13.150 に答える
1

a が標準 C++ 演算子 (operator[] や operator* など) をオーバーロードするオブジェクトである場合、クライアントは a->operator[](i) または (*a )[私]

于 2012-04-28T03:08:50.877 に答える