私はそれを読んでいます:関数呼び出しパラメータは常に新しいオブジェクトですか?
Javaでは、すべてのパラメータが値渡されます。私は、関数へのポインタを渡すと、その関数に私はポインタを変更する場合は、これは、その識別子を使用したオブジェクトを変更しないであろう
value, reference, or const-reference
:C++では、パラメータは によって渡すことができますそれをパラメータとして指定するには、関数に渡されたポインタのみを変更します。
実際は、技術的には、C++ではすべてがVALUEでCOPYされますが、このコピーされた値はメモリアドレス(ポインタまたは参照)として使用できるという点で違います。したがって、既存のポインタ関数のパラメータとして渡されなければなりません。そのポインタによって保持されているメモリアドレスの値ではなく、そのメモリアドレスの値を渡す必要があります。
したがって、すべての関数パラメータは、特定の単一の呼び出しでパラメータとして機能するように特別に作成された既存のオブジェクトから派生した新しいコピーであり、実際の既存のオブジェクトには正しいものはありませんか?
実際C++すべてがコピーされた値によって渡されるで技術的に、差はこのコピーされた値がメモリアドレス(ポインタまたは参照)として使用することができることであることを意味する
はい、これは技術的にあります本当。意味的には、参照を渡すこと( 'int&'のように)は異なっていると考えることができます。しかし、CPU上で実行される実際のコードはまだ変更できないメモリアドレスを押しています。 –
参照渡しは、ポインタを値渡しすることとは意味的に大きく異なります。値でポインタを渡すには、ポインタを渡すために何かのアドレスを明示的に取る必要があります。関数内では、指示されたものに対して操作を実行するために逆参照する必要があります。参照渡しでは、これらのことのいずれも行いません。値渡しのように何かを渡し、値を操作しているかのようにパラメータで操作する関数内で渡します。これら2つを混乱させないでください。 – newacct