アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

a += 2;

a += 3;
}

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

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

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

A 回答 (4件)

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



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

他の方も書かれているように、分かりやすさ重視で書けば良いと思います。


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

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

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

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



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

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

お礼日時:2014/05/14 22:14

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



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

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

お礼日時:2014/05/14 22:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!