質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1374閲覧

ゲームループ内では参照渡しだけでプログラムを組むべきでしょうか

Tololololo

総合スコア118

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/07/14 03:59

編集2019/07/14 04:00

値渡しと参照渡しの処理速度について結果が大きく分かれてくるのはループ処理などの複数回に渡る処理を行った場合によくわかると思います。
通常ゲームをプログラムする際、ゲームプログラム側から終了処理が行われるまではwhileなどでループし続けると思います。
ゲーム全体がループされているのであれば、そのゲームプログラムでの処理は全て参照渡しで行った方が良いのでしょうか?
今の所値渡しと参照渡しが混在しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「値渡し」「参照渡し」の他に「ポインタ渡し」もありますね。

どれが一番良いかという話ではなく、ケースバイケースなので使い分けが必要です。

参考:C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう
https://qiita.com/agate-pris/items/05948b7d33f3e88b8967

投稿2019/07/14 22:47

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

渡したいデータによります。
単一の数値は呼び出し元の値を変更する必要が無ければ値渡しになると思います。
巨大なデータや値の変更を期待するクラスなどなら参照渡しになるでしょう。
ただ、例えば矩形を表すRectという構造体があったとします。

C++

1typedef struct { 2 int x; 3 int y; 4 int width; 5 int height; 6} Rect;

これを受け取る関数があったとすると、呼び出し元のRectを変更するなら(戻り値で返さない限り)参照渡しになります。
そうでなくても、値渡しで呼び出し時にint 4つをスタックにコピーするよりも、参照渡し(const Rect&)でポインタを1つスタックに積むほうが呼び出しが早くなります。

しかし、参照渡しの場合は関数内で値にアクセスする際に毎回ポインタの先のデータを取得する必要があるため、余計なメモリアクセスの時間が必要になります。
そのため、関数内で何回も何回もRectのデータにアクセスする場合は、値渡しのほうが全体の処理速度が上がることがあります。

といっても、結構レアケースのため、とりあえずは構造体やクラスは参照渡しにしておいて最後のチューニングでパフォーマンスに影響があると判明した部分のみ値渡しにする、で十分に思います。
幸い、ポインタでなく参照渡しの場合、呼び出し元には影響しないので変更点は少ないですしね。

投稿2019/07/14 06:42

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問