みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

プログラムのコードの書き方について

素朴な疑問なのですが。
私はC++を使用しています。

あるクラスのメンバ関数があってその中でおおまかに3つの処理をしているとします。
3つの処理がありますが、ただ1つの目的のための処理です。
その関数内が見づらいという事で、ここだけでしか使用しない3つの処理を更に関数にしてもいいのでしょうか?

例えるなら
void classA::add()
{
a += 1;

a += 2;

a += 3;
}

これら3つの処理(加算)を関数にしてしまおうという事です。
※もちろん、実際の3つの処理(加算)はもっと複雑です。

関数にアクセスするのも、微々たるものですが処理が増えると思います。
大きなプロジェクトの場合、積み重なって無視できない程になるのでしょうか?

皆さんはどう書かれていますか?

投稿日時 - 2014-05-14 20:09:47

QNo.8595295

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

クラス定義中にメンバ関数の定義を書けば, 暗黙に inline 指定されます.

inline は処理系に対するヒントなので, 「必ずインラインになる」とは限らないですが.

投稿日時 - 2014-05-15 00:08:37

ANo.3

他の方も書かれているように、分かりやすさ重視で書けば良いと思います。
読んで分かりやすいだけではなく、コンパイラにも分かりやすい様に。
小細工はせず、基本的にはコンパイラの最適化機能に任せる方が良い様に思います。

>積み重なって無視できない程になるのでしょうか?

ループの中から関数を呼びだす時には、何もしないと関数呼び出しのオーバーヘッドが蓄積します。
そこはできればinlineを明示的に。
それとループに入る前に、回る回数が事前に分かるように書くとベクトル化などの最適化がされやすくなります。
whileよりもできればforに

投稿日時 - 2014-05-14 23:32:27

ANo.2

私も関数に分けることを検討します。

処理内容にもよりますが、inline にすれば、最適化の処理によって直接書いたのと同じオブジェクトコードになる可能性も出てきます。

投稿日時 - 2014-05-14 21:36:20

お礼

なるほど…
確かinlineは書かなくても勝手にしてくれるんでしたっけ?
調べてみたいと思います。
ありがとうございました。

投稿日時 - 2014-05-14 22:14:23

ANo.1

関数内が見づらく、その中の処理を3つにくくったほうが理解しやすいなら、私ならそうします。

確かにその結果関数コールのコストが増えますし、積み重なって無視できなくなることもわずかながら考えられます。しかし、大きなプログラムでパフォーマンスを考慮すべき場所はたいてい関数コールのコスト以外にあり、その場合考慮すべき個所を「関数内のある部分」から「ある関数」に変えることになるので、プロファイラでどこが問題か細かく検知しやすくなります。

投稿日時 - 2014-05-14 20:57:35

お礼

言われてみれば確かに他の部分をどうにかしますよね…
見やすさ(バグ箇所の分かりやすさ)を重視したいと思います。
ありがとうございました。

投稿日時 - 2014-05-14 22:13:38

あなたにオススメの質問