0

重複の可能性:
リファレンスは内部でどのように実装されていますか?

void f (int& a)
{
    a ++;
}

int main ()
{
    int b = 5;
    f(b);
    cout << b << endl; //prints 6
}

C++ で参照の構文を見たとき、最初は変数 b (オブジェクトの場合) が f にコピーされるように見えました。これらの参照は実際に内部でどのように機能しますか? (いくつかの単純な asm は素晴らしいでしょう。)

4

2 に答える 2

3

この場合、参照渡しはおそらくポインタ セマンティクスを使用します。つまり、オブジェクトのアドレスがパラメータとして渡される可能性があります。\

C++ で参照の構文を見たとき、最初は変数 b (オブジェクトの場合) が f にコピーされるように見えました。

いいえ。これは、参照の利点の 1 つです。コピーは不要です。

    f(b);
00DF1405  lea         eax,[b]  
00DF1408  push        eax  
00DF1409  call        f (0DF1177h)  
00DF140E  add         esp,4  

eaxのアドレスが含まbれ、関数の引数スタックにプッシュされます。

于 2012-09-18T09:01:41.543 に答える
2

C++ 参照の内部では、ポインターとまったく同じように実装されています。唯一の違いは、いくつかのコンパイル時のチェックと異なる構文です。したがって、あなたの場合、関数 f は整数 b への「ポインター」を取得し、b の値をインクリメントします。

于 2012-09-18T09:04:24.283 に答える