3

「Void」が実際に「6」を返すのはなぜですか?

void Void (int &ref){
    ref++;
}

int main () {

    int test= 5;
    Void(test);
    cout << test;  // is 6      

    return 0;
}

ここで何が起こっているのかよくわかりません。Void(test) では、テストのアドレスを渡していません。「Void(&test);」ではないのはなぜですか? ref++ が値 5 に 1 を追加するのはなぜですか? 「*ref++」ではないでしょうか。

4

5 に答える 5

3
void Void (int &ref)
               ^
             this!

あなたは参照によってそれを渡しています

于 2013-04-20T21:37:51.933 に答える
2

のパラメータVoidは typeint&です。&インint&は型の一部です。参照型にします。&オブジェクトのアドレスを取得するために使用する可能性のある とは関係ありません。

パラメータ型は参照型であるため、渡されるオブジェクトはすべて参照によって渡されます。これはref、関数の内側がtest外側のオブジェクトを参照することを意味します。したがって、ref++に影響を与えますtest

&これは、型にa がなく、値で渡される場合とは対照的です。これにより、オブジェクトが関数にコピーされ、ref++コピーにのみ影響します。

于 2013-04-20T21:38:45.527 に答える
1
void Void (int &ref){
   ref++;
}

パラメータを で渡したreferenceので、ref内部のパラメータの変更Voidは呼び出し元の変数に直接適用されます。つまり、testこの場合refは への参照であるため、test

于 2013-04-20T21:38:53.387 に答える
0

あなたはそれを参照渡ししています。C++ で変数を参照渡しする場合、引数の前に & を付ける必要はありません。関数のパラメーターが参照の場合は、関数呼び出し時に参照によって引数を渡します。

于 2013-04-20T21:39:57.023 に答える