変数を関数に渡すとき、関数が変数のコピー/複製のみを取得するのはなぜですか?
int n=1;
void foo(int i)
{
i++;
}
ご存知のように、関数 foo() はn
foo(n) を使用して の値を変更することはできません。
もちろん、変数のアドレスを渡して、パラメーター変数に何らかの変更を加えることができます。
でも、ちょっと不便だと思いませんか?
なぜ c/c++ は、「実際の」変数自体を関数に直接与えるのではなく、関数に複製のみを与えるように設計されているのですか?
このパラダイムの長所/利点は何ですか?
更新:
@paxdiablo の回答を読みました。彼の「カプセル化、モジュール性、効果の局所化」の説明は良いと思います。
しかし、私のやり方では、パラメーター引数の値も保持できます。カプセル化も実現できます。このようにして:(関数がデフォルトで重複する代わりに「実際の」変数を直接取得できると仮定します)
void foo(int n)
{
int temp=n;
//Do something to temp...
}
そして私のやり方では、渡されたパラメーターの値を変更したい場合、 「参照渡し」やポインターなどの複雑なメカニズムを排除できます。それが利点です。
しばらく考えた後。私が提案したように c/c++ が設計されていない理由は、単に私のやり方の不便さのためであることに気付きました!
私のやり方では、関数に変数の長いリストがある場合、それはひどいことになります。私が考えるより便利な方法は、実際には不便です。次
のように書く必要があります。
void foo(int a,int b,double c,float d,char s...)
{
int temp1=a;
int temp2=b;
double temp3=c;
float temp4=d;
char temp5=s;
...
//Do something to temp{1,2,3,4,5....}
}
そのため、c/c++ の設計者は、利便性とトレードオフのために複雑なメカニズムを導入しています。
私は正しいですか?