« 俺、すげえ | トップページ | 久々にエロ漫画 »

前置インクリメント

しばらく仕事でC++使っていると、大抵前置インクリメントを使うものだ。何の本だったか(More Effective C++ だか、C++ Coding Standards だか)に

「前置、後置どっちでもいいときには前置インクリメントを使おう」的なことを書いてあった気がする。

で、これも手元にリソースがないのだが、確か、

前置インクリメントは、インクリメント後に評価を行う。
後置インクリメントは、インクリメント前に評価を行う。

つまりこう

int a=0,b=0;
int c=++a;//インクリメントしてcに代入
int d=b++;//dに大乳代入された後にインクリメント

とした場合、a=1,b=1,c=1,d=0となる。で、このときに、後置インクリメントの際には代入の後にインクリメントという仕様を満たすためだかなんだか、コピーが作成されてしまう。

そう、コストが少しだけかかってしまうのだ。

また、確かMore Effective C++ だったと思うが、後置は前置を用いて実装されているということだ。

ただし「あなたがユーザー定義型を使う場合」と言う風に書いているらしいので、そこまで気にするほどのことではないのかもしれない。

ただ気になるのは、いくつかの入門書や、C++そのものを主題にしているわけではない(グラフィックスプログラミング等)本では、後置インクリメントが多用されているのである。

どちらでもいいのだし、どちらかといえば前置を用いたほうがいいにもかかわらず、このような傾向がある。好みの問題と言えば好みの問題だけれども、インクリメントと言えば、自動的にi++とか書いている人も多いと思う。なぜならば初心者は本のとおりにコードを書き写し、実行して動作すれば「正しい」と思ってしまうからである。

で、C++においては後置が明らかに適切ではないときもある。にもかかわらず、クセなのか、後置しか選択肢を持たない人が多いようです。

これって、質の悪い入門書の罪ではないでしょうか?そりゃ、初心者は前置とか後置とか言っても聞きゃあしないでしょう。でもそうならばサンプルコードは前置インクリメントに、今からでも改訂版出す際にでも前置にすべきではないでしょうか?

と、思うんですが。おそらくC言語で当たり前のように後置なのは何か事情があるのでしょう。(グーグル先生を探してみても事情を教えてくれるリソースは見当たらないのですが)

少なくともC++の入門書において、特にforループのカウンタを前置にしていないものは買わないほうがいいんじゃないでしょうか。

|

« 俺、すげえ | トップページ | 久々にエロ漫画 »

プログラミング(C++)」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 前置インクリメント:

« 俺、すげえ | トップページ | 久々にエロ漫画 »