Qt / C ++アプリケーションのすべての値渡し引数または参照渡し引数を変更して、const参照渡しするように指示されました。すべてのQtタイプ(たとえばQString)が関係しますが、ネイティブタイプ(double、integer)は関係しません。理由をより正確に説明できますか、それとも参考になりますか?
2 に答える
値渡しでは引数のローカル コピーが作成されるため、大きな構造体が渡されると、時間とスペースが大幅に失われる可能性があります。そのため、大きな構造体は参照によって渡されます。ただし、関数/メソッドがパラメーターのコピーを本当に必要とする場合は、それを値で渡します。
一方、参照渡しはオブジェクトを変更に対して脆弱にします。オブジェクトの状態が関数内で変更された場合、元のオブジェクトは同じであるため変更されます。そのため、const 参照が使用されます。誤ってオブジェクトを変更/編集するのを防ぎます。
もう 1 つの理由は、ポリモーフィズムです。値渡しの場合、仮想性が失われますが、参照渡しまたはポインター仮想メソッドは期待どおりに機能します。
参照渡しの場合、同じインスタンスのアドレスを渡します。値渡しには、オブジェクトを別のオブジェクトにコピーすることが含まれます (の場合はコピー コンストラクターを介してQString
) int、double などのネイティブ型はサイズが小さくなるため、オーバーヘッドが少なくなります。QString
同様のオブジェクトを比較します。参照を渡すことconst
により、呼び出された関数によって行われた変更が同じ場所への両方のポイントとして渡されたオブジェクトに影響を与えるため、渡された関数でオブジェクトが変更されないようにします。