2011-01-13 14 views
1

は、誰かが通過引数の以下のメカニズムの違いが何であるかを説明してくださいすることができます:値によって、その結果によって、結果値によって、例、可能であれば、おかげで事前渡す引数

+0

この記事を見たことがありますか?:http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_11/CH11-2.html – davogotland

答えて

1

Evaluation strategyを参照してください。

コードの例では、HEREを確認できます。

またC#言語仕様が有用であり得る:

5.1.4値修飾子アウトrefまたは ずに宣言されたパラメータの値がパラメータである

パラメータ。 valueパラメータは、パラメータ が属する機能部材 (メソッド、インスタンスコンストラクタ、 アクセサ、またはオペレータ)または匿名 関数の呼び出し時に存在 に入ってくると、で与えられる引数の 値で初期化されます 呼び出し。通常、 の値パラメータは、 ファンクションメンバまたは匿名関数の返却時に存在しなくなります。値パラメータは匿名関数 (§7.15)で撮影し ある場合に匿名 機能から作成されたデリゲートまたは式 ツリーがガベージ コレクションの対象になるまで はしかし、その寿命は少なくとも で延びています。 明確な割り当てチェックのために、値 は、最初に と見なされます。

5.1.5参照パラメータ

REF修飾子で宣言されたパラメータが基準パラメータです。 A 参照パラメータは、新しい格納場所 を作成しません。代わりに、 参照パラメータは、 メンバまたは匿名関数 呼び出しで、変数 が引数として指定された格納場所と同じ格納場所 を表します。したがって、参照パラメータの の値は、基本変数として常に と同じです。確定的な割り当て規則に従う は、参照パラメータに適用されます。 出力 のパラメータについては、§5.1.6に記載されているさまざまな規則に注意してください。 それは関数 部材又はデリゲート呼び出しで 参照パラメータとして渡すことができる前に

  • 変数は間違い (§5.3)を割り当てなければなりません。

  • ファンクションメンバまたは匿名関数内で、参照 パラメータは、最初に と見なされます。構造体の型のインスタンスメソッドまたはインスタンス アクセサ内

、この キーワードは、構造体のタイプ(§7.6.7)の基準 パラメータとして正確に動作します。

5.1.6出力パラメータ

アウト 修飾子で宣言されたパラメータは、 出力パラメータです。出力パラメータ は新しいストレージを作成しません 場所。代わりに、出力パラメータ は、ファンクションメンバまたは の呼び出しで、 引数として指定された変数と同じ格納場所 を表します。したがって、 出力パラメータの値は、基本変数 と常に同じです。以下の確定的な 割り当て規則が出力 のパラメータに適用されます。 §5.1.5に記載された参照パラメータについては、異なる規則 に注意してください。

  • 変数は、それが機能
    メンバーまたはデリゲートの呼び出しで
    出力パラメータとして渡すことができる前に絶対に割り当てする必要はありません。
  • 機能部材の正常完了後又は
    呼び出しを委譲、
    は、出力パラメータとして渡された各変数は、実行 パスに割り当てられたと考え
    あります。
  • 関数メンバーまたは匿名関数内では、出力 の出力は、最初は 未割り当てと見なされます。
  • 関数メンバまたは匿名 機能のすべての出力パラメータは間違い 関数の前に、通常 メンバーまたは匿名関数
    戻ります(§5.3)を割り当てる必要があります。 構造体型のインスタンスコンストラクタ内

、このキーワードは正確 構造体型(§7.6.7)の出力パラメータとして を振る舞います。

0

参照C++で。完全なリファレンスガイド。ハーバート・シルデ。第3版。 139ページ。

"このメソッドは、引数の値をサブルーチンの仮パラメータにコピーします。この場合、パラメータの変更は引数には影響しません。

「参照によりコールはサブルーチンに引数を渡す第2の方法である。この 方法では、引数のアドレスをパラメータにコピーされる。サブルーチンの内部に、 アドレスが使用される実際の引数にアクセスするために使用されていますつまり、パラメータに加えられた変更は の引数に影響します。一般的な情報については

...

+1

値渡しの良い説明と参照渡し。 – davogotland

+0

ありがとうございますが、結果と結果値による合格についての質問には答えませんが、それは私の質問ではありませんでした! – rookie