teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

C++を踏まえて

2020/06/27 09:38

投稿

raccy
raccy

スコア21768

answer CHANGED
@@ -11,4 +11,6 @@
11
11
 
12
12
  公式ドキュメントに「値渡し」であると明記されています。
13
13
 
14
- 値渡しですので、読み出し先の関数内で仮引数に代入をしても、呼び出し元の実引数が変わることはありません。しかし、渡されるのはオブジェクトへの参照という値であるため、呼び出し先の関数で、仮引数が示しているオブジェクトそのものを変更するような副作用を伴う処理を行った場合、実引数が示しているオブジェクトも変化します。
14
+ 値渡しですので、呼び出し先の関数内で仮引数に代入をしても、呼び出し元の実引数が変わることはありません。しかし、渡されるのはオブジェクトへの参照という値であるため、呼び出し先の関数で、仮引数が示しているオブジェクトそのものを変更するような副作用を伴う処理を行った場合、実引数が示しているオブジェクトも変化します。
15
+
16
+ C++で言えば、動作的にはポインタ渡し(アドレス渡し)に近いです。変数は実はC/C++でのポインタのような物と考えるとわかりやすいかも知れません。ポインタ渡しも値渡しの一種なので、同じような動作になります。