C++ で参照渡しよりもポインタ渡しの方が優れている点は何ですか?
最近、関数の引数を参照渡しではなくポインタ渡しで渡すことを選択した例をいくつか見てきました。これを行うことには利点がありますか?
例:
func(SPRITE *x);
の呼びかけで
func(&mySprite);
対
func(SPRITE &x);
の呼びかけで
func(mySprite);
ベストアンサー1
ポインタによる受け渡し
- 発信者はアドレスを取得する必要があります -> 透明性がありません
- 0 値を指定して、mean を指定できます
nothing
。これを使用して、オプションの引数を指定できます。
参照渡し
- 呼び出し元はオブジェクトを渡すだけです -> 透過的。ポインター型のオーバーロードは不可能なので (ポインターは組み込み型です)、演算子のオーバーロードに使用する必要があります。したがって、
string s = &str1 + &str2;
ポインターを使用することはできません。 - 0 値はあり得ない -> 呼び出された関数は 0 をチェックする必要がない
- const への参照は一時オブジェクトも受け入れます。
void f(const T& t); ... f(T(a, b, c));
一時オブジェクトのアドレスを取得できないため、ポインターをそのように使用することはできません。 - 最後になりましたが、参照は使いやすくなり、バグが発生する可能性が低くなります。