シンプルな質問です
関数へ値渡しをすることによる、利点、メリット
値渡しじゃないとダメな状況など、そういうことはあるのでしょうか?
単純に考えたらアドレス、ポインタ、参照渡しの方が
速度的に有利な気がして値渡しを使う理由が分かりません
何か値渡しにメリットはあるのでしょうか?
言語や端末によって話は変わってくるかもしれませんが
とりあえず言語はC/C++としてお願いします。

回答3件
あなたの回答
tips
プレビュー
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。
0グッド
0クリップ
投稿2019/06/28 01:00
シンプルな質問です
関数へ値渡しをすることによる、利点、メリット
値渡しじゃないとダメな状況など、そういうことはあるのでしょうか?
単純に考えたらアドレス、ポインタ、参照渡しの方が
速度的に有利な気がして値渡しを使う理由が分かりません
何か値渡しにメリットはあるのでしょうか?
言語や端末によって話は変わってくるかもしれませんが
とりあえず言語はC/C++としてお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
その関数の中でその引数をどう操作しようと呼び出しもとの変数には全く影響を与えない、というメリットがあります
そういう保証がないとなると、これから呼び出す関数が引数の値を変えないかどうかいちいちチェックする必要が出てきてやってられなくなりますね
投稿2019/06/28 01:05
総合スコア88163
0
ベストアンサー
こんにちは。
C言語には参照がないので、「参照渡し」したい時はポインタを使うしか無く nullチェックが面倒です。
C++では参照があるので該当しませんが。
他にはint型等の基本型を渡す時は、間接参照でないので値渡しの方が一般に高速です。
レジスタに入る程度の小さなクラスなら同様に値渡しした方が高速なケースも若干ありそうです。(処理系にもよりますし、どの処理系でもコンストラクタやデストラクタも呼び出されるのであまりあてにするべきではないですが。)
なお、参照渡しで参照先変数を書き換えたくない時はconst参照を使えば事実上書き換え不可となります。(そのまま書き換えようとするとコンパイラが指摘してくれます。)
投稿2019/06/28 03:44
総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
単純に考えたらアドレス、ポインタ、参照渡しの方が
速度的に有利な気がして
int
やdouble
のようなレジスタに置けるものは、値渡しだとレジスタで渡すことができて速度的に有利です(x64でレジスタが増えましたので、レジスタで渡せる引数の数も増えています)。
投稿2019/06/28 01:09
総合スコア146544
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/28 01:11