重複の可能性:
C ++のポインター変数と参照変数の違いは何ですか?
たとえば、同じことを行う2つの関数があります。
int func(int &a)
{
return a+1;
}
と
int func2(int *a)
{
return *a+1;
}
これらの関数のいずれかを呼び出すときに、func2よりもfuncを使用する利点は何ですか?
重複の可能性:
C ++のポインター変数と参照変数の違いは何ですか?
たとえば、同じことを行う2つの関数があります。
int func(int &a)
{
return a+1;
}
と
int func2(int *a)
{
return *a+1;
}
これらの関数のいずれかを呼び出すときに、func2よりもfuncを使用する利点は何ですか?
これらは両方とも、状況に応じて長所または短所になる可能性があります。
あなたの機能は両方とも間違っています。渡された引数を変更しないため、次のように const として受け取る必要があります。
int func(const int &a)
{
return a+1;
}
int func2(const int *a)
{
return *a+1;
}
これが参照の利点です。参照バージョンに右辺値を渡すことができます。
func(10);
func(func(func(10)));
ポインターバージョンではそれができません。
ポインターはより柔軟で、次のように宣言で事前定義することもできます。
int func2(int *a = nullptr);
これは単純なケースでは機能しませんが、他の多くのケースでは機能します。
ポインターは、リストへの保存、タイプキャストなど、他のことにも簡単に使用できます。
はい、参照を再割り当てすることはできません。
a が標準 C++ 演算子 (operator[] や operator* など) をオーバーロードするオブジェクトである場合、クライアントは a->operator[](i) または (*a )[私]