2017-01-21 11 views
-3

を未定義ている我々は、二つの選択肢があります: REF-スタイル:または我々はスワップ機能のために行動

void swap (int &a, int &b) 
{ 
    int temp; 

    temp = b; 
    b = a; 
    a = temp; 
} 

とポインタスタイル:

void swap (int *a, int *b) 
{ 
    int temp; 

    temp = *b; 
    *b = *a; 
    *a = temp; 
} 

REF-スタイル絶対に法的に私たちは、この関数変数がないことによって、値渡し を使用しようとするが、ポインタスタイルは、いくつかの問題を持っている参照しても、彼らはpointers- が実際に、我々はその楽し外のローカル変数のメモリを使用しようとしていますction、 とすることにより、いくつかの日には、いくつかのマシンでは、我々は未定義の動作を有していてもよく、また、コードは例のために動作します。このコードでは :

main() 
{ 
// 
{ 
    int i=12; 
    int *j=&i; 
} 
//in this area, there is not variables i and j, but phisically threre is 
// unsafe-relationship between this address: &i and what point to (12) , 
//any more logic according to this assumtion may be work 
//but not safe -in the scene of undefined behavior- 
+3

"関数の外部にあるローカル変数のメモリを使用しようとしています"どのローカル変数? – songyuanyao

+1

あなたが何を言っているのか、あなたが話していることや何を求めているのかははっきりしていません。より多くの、より短い、より明確な文章を書いてください。たぶん "使用"の例を挙げることもできます。 – philipxy

+2

どちらの場合でも、呼び出し元は、有効な引数を渡すこと、つまり、 'a'と' b'が参照すること、または関数が返った後に生涯を持つものを指すことを保証することができます。それができる限り、あなたの関数の両方の形式の振る舞いはよく定義されています。 – Peter

答えて

2

あなたが外についての文章を得たところ私にはわかりませんから機能。その文は間違っているので、あなたはそれらを信用すべきではありません。

それは「戻ってきた機能が未定義の動作を呼び出した後、ローカル変数またはパラメータへのアクセス」でなければなりません。 (これらは、私自身の言葉です。)

公式文言を取得するには、C++標準で見えます。探すためのキーワードは寿命保管期間未定義の動作です。

+2

これはC言語ではなく、C言語ではないことに注意してください.C++ではなく、最新のC++標準を指す価値があります。 – tambre

+0

修正しました、ありがとうございます。 –

+0

@Roland ILLIGは、私はこれを見ている実際には、あなたに感謝: – dt128

関連する問題