C ++の関数の戻り値の型としてポインターまたは参照を使用する際の経験則はありますか?

クロス

最初にN00bアラート。その中の根底にある論理を理解していないとき、私は何かをするのが嫌いです。そのため、ごく最近、C ++を使い始めましたが、それでもポインターと参照の概念を理解しようとしています。また、関数の戻り値の型としての使用法。

したがって、ここでは、ポインタと参照をいつ、どこで、なぜ使用する必要があるかについての適切な説明が説明されています。関数の戻り値の型と同じ説明がそれらに当てはまりますか?

user349594

違いは、一般的に参照とポインタの違いと同じです。これらは、異なる用途を対象とした2つの異なるものです。ポインタは文字通りメモリ内の何かのアドレスであり(したがって、それが指すものは変更できます)、参照は内部で同じ方法で実装される可能性があります(そして多くの場合そうです)が、経済性を失うことなくメモリアドレスを隠すことを目的としていますそれらをコピーする代わりに既存のオブジェクトを指すこと。

ポインタには、メモリへの概念的な近接性に関連する機能があり(ポインタ演算により、格納されているデータを文字通り1つに渡ります)、他の場所に適用される多くのルールを無視するために使用できます。参照はどこにも順応性がありませんが、より安全で、相対的な安定性が保証されます。

私はこれらのことを正直に言うための経験則のファンではありません、特にそれらが間違った場所や手にどれほど致命的である可能性があるかを与えられたポインターでは、しかしあなたが絶対にしなければならない場合:それが合理的である限り参照を使用する初心者として選択肢があれば、おそらくより安全な賭けです。ポインタは、メモリ内の複数のアイテムへの単一の動的アクセサが必要な場合、または一部のポリモーフィズムの場合にのみ、初心者レベルでいくらか必須になります。

いくつかのAPIにバインドされているため、何がどの形式で渡されるかという点で設定されている場合は、渡されたものに固執する可能性があります(ポインターはポインターのままで、そのまま返されます。参照)。

一般に、同じ文でnoob、function、returnポインタを聞くと、その人の安全が心配になります:)前に述べたように、C ++でのスコープを覚えていると、関数内で作成されたものは、戻ると破棄されます。参照またはプレーンコピーを使用したこれらの場合のコンパイラ警告または明らかなエラー。ポインタトリックの実行を開始すると、それがひどく間違ってしまい、エラーが発生した場所から遠く離れてしまう可能性があります。参照を使用して物事を混乱させることはまだ可能ですが、非常に長いショットのIMOではそれほど簡単ではありません。

それでも、経験則を収集するのではなく、手の届く範囲にあるコードを調べて、さまざまな使用法やいくつかの実装について理解を深めることをお勧めします。私の投稿には単純化と省略が多すぎて面白くありませんが、より良いものを明確にすることはできないようです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数 (C#) のパラメーターとして使用するために、チェーンの最後の式を参照する方法はありますか?

分類Dev

関数のパラメーター値に基づいて、C ++で関数の戻り値の型を動的に変更する方法はありますか?

分類Dev

パラメータとして関数を使用したC ++エラー、non-constへの参照の初期値は左辺値である必要があります

分類Dev

c ++の戻り値の型には、現在のクラスの型を持つポインタがあります

分類Dev

C ++でメンバー関数のベクトルを使用するときに、共変の戻り型を実装する方法はありますか?

分類Dev

voidポインタを使用せずにC関数で任意の型を返す方法はありますか?

分類Dev

C ++は関数をテンプレートとして受け入れ、関数の戻り値の型のベクトルを返します

分類Dev

そのノードを指すすべてのポインターのアドレス空間を取得するC ++の関数はありますか?

分類Dev

C ++で関数ポインタの代わりに関数参照を使用するのはいつですか?

分類Dev

C ++:派生クラスへのポインターを使用した仮想関数呼び出しにはまだvlookupがありますか

分類Dev

C標準では、ポインターを(整数)の数値にする必要がありますか?

分類Dev

c ++配列サイズを関数の戻り値に設定する可能な方法はありますか

分類Dev

Cコードのリント:関数のパラメーター(ポインター)はconstである可能性があります。*しかし*私は渡されたポインタに書いています

分類Dev

C ++の関数のデフォルトの戻り値の型はありますか?

分類Dev

C++。関数の戻り型の代わりに null ポインターを返す方法は?

分類Dev

C ++関数テンプレート:引数の型と戻り型に&を使用する必要がありますか?

分類Dev

nmによる出力として特定のC関数/シンボルを使用する方法はありますか?

分類Dev

非ポインター型にCスタイルのキャストではなくstatic_castを使用することに利点はありますか?

分類Dev

C ++のポインターと参照の間にオーバーヘッドの違いはありますか?

分類Dev

Cでは、メンバー構造体(ダブルポインター)のポイント値を取得するのに問題があります。値を割り当てる関数の外部で値が失われます

分類Dev

最新のC ++でarg型リストフォーム関数ポインタを取得する良い方法はありますか?

分類Dev

C文字列をchar *として関数に渡すと、ランタイムエラーが発生するのはなぜですか(ただし、char []として定義されたC文字列を渡すことは問題ありません)。

分類Dev

C:ポインターが実際に何かへのポインターである場合、関数はゼロ化されたポインターを受け取り続けます

分類Dev

C ++ではstd :: functionまたは関数ポインターを使用する必要がありますか?

分類Dev

未知の型の配列をパラメーターとしてCの関数に渡す方法はありますか?

分類Dev

void swap()を使用して、C ++でこの関数をテンプレート化するときに行った偶然はありますか?

分類Dev

C ++は関数またはデータメンバーを参照していますか?(非静的メンバー関数への参照を呼び出す必要があります)

分類Dev

C ++の右辺値とポインターのポインターはいつ使用する必要がありますか?

分類Dev

c3 jsを使用して、ズームインしたときにさらに多くのx軸値を表示する方法はありますか?

Related 関連記事

  1. 1

    関数 (C#) のパラメーターとして使用するために、チェーンの最後の式を参照する方法はありますか?

  2. 2

    関数のパラメーター値に基づいて、C ++で関数の戻り値の型を動的に変更する方法はありますか?

  3. 3

    パラメータとして関数を使用したC ++エラー、non-constへの参照の初期値は左辺値である必要があります

  4. 4

    c ++の戻り値の型には、現在のクラスの型を持つポインタがあります

  5. 5

    C ++でメンバー関数のベクトルを使用するときに、共変の戻り型を実装する方法はありますか?

  6. 6

    voidポインタを使用せずにC関数で任意の型を返す方法はありますか?

  7. 7

    C ++は関数をテンプレートとして受け入れ、関数の戻り値の型のベクトルを返します

  8. 8

    そのノードを指すすべてのポインターのアドレス空間を取得するC ++の関数はありますか?

  9. 9

    C ++で関数ポインタの代わりに関数参照を使用するのはいつですか?

  10. 10

    C ++:派生クラスへのポインターを使用した仮想関数呼び出しにはまだvlookupがありますか

  11. 11

    C標準では、ポインターを(整数)の数値にする必要がありますか?

  12. 12

    c ++配列サイズを関数の戻り値に設定する可能な方法はありますか

  13. 13

    Cコードのリント:関数のパラメーター(ポインター)はconstである可能性があります。*しかし*私は渡されたポインタに書いています

  14. 14

    C ++の関数のデフォルトの戻り値の型はありますか?

  15. 15

    C++。関数の戻り型の代わりに null ポインターを返す方法は?

  16. 16

    C ++関数テンプレート:引数の型と戻り型に&を使用する必要がありますか?

  17. 17

    nmによる出力として特定のC関数/シンボルを使用する方法はありますか?

  18. 18

    非ポインター型にCスタイルのキャストではなくstatic_castを使用することに利点はありますか?

  19. 19

    C ++のポインターと参照の間にオーバーヘッドの違いはありますか?

  20. 20

    Cでは、メンバー構造体(ダブルポインター)のポイント値を取得するのに問題があります。値を割り当てる関数の外部で値が失われます

  21. 21

    最新のC ++でarg型リストフォーム関数ポインタを取得する良い方法はありますか?

  22. 22

    C文字列をchar *として関数に渡すと、ランタイムエラーが発生するのはなぜですか(ただし、char []として定義されたC文字列を渡すことは問題ありません)。

  23. 23

    C:ポインターが実際に何かへのポインターである場合、関数はゼロ化されたポインターを受け取り続けます

  24. 24

    C ++ではstd :: functionまたは関数ポインターを使用する必要がありますか?

  25. 25

    未知の型の配列をパラメーターとしてCの関数に渡す方法はありますか?

  26. 26

    void swap()を使用して、C ++でこの関数をテンプレート化するときに行った偶然はありますか?

  27. 27

    C ++は関数またはデータメンバーを参照していますか?(非静的メンバー関数への参照を呼び出す必要があります)

  28. 28

    C ++の右辺値とポインターのポインターはいつ使用する必要がありますか?

  29. 29

    c3 jsを使用して、ズームインしたときにさらに多くのx軸値を表示する方法はありますか?

ホットタグ

アーカイブ