ポインター渡しを使用する C++ でのこの swap 関数の簡単なテストを考えてみましょう。
#include <iostream>
using std::cout;
using std::endl;
void swap_ints(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
return;
}
int main(void)
{
int a = 1;
int b = 0;
cout << "a = " << a << "\t" << "b = " << b << "\n\n";
swap_ints(&a, &b);
cout << "a = " << a << "\t" << "b = " << b << endl;
return 0;
}
このプログラムは、アドレスで渡した場合よりも多くのメモリを使用しますか? この関数宣言のように:
void swap_ints(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
return;
}
この参照渡しバージョンの C++ 関数は、ポインター変数を作成する必要がないため、使用するメモリが少なくなりますか?
また、C には、C++ と同じ「参照渡し」機能がありませんか? もしそうなら、それはメモリ効率の良いコードを意味するので、そうではありませんか? そうでない場合、Cがこの機能を採用しないという背後にある落とし穴は何ですか。私が考慮していないのは、C++ がおそらく舞台裏でこの機能を実現するためのポインターを作成するという事実だと思います。これはコンパイラが実際に行うことであり、C++ にはコードがきれいになる以外に真の利点はありませんか?