*p++ #2
意味も無く時間差をつけて言及。もとの話はこことここ。
えーと、*p++ が推奨するようなものでもないというのは、わけて書いたほうが良いとか、いまどきなら生成コードは同じとかいう話でなくて、ポインタ演算しないといけない場面、ポインタ演算したほうが可読性が高い場面ってのはさほど多くないって話。a = *p++; を a = *p; p++;に書き換えろなんて主張は自分もあほらしいと思う。
で、たとえば古いCの教科書とか見ると多分下記のようなコードがある。mixi で話題になってたのもこんなの。
int main(int argc, char **argv) { argc--, argv++; while (argc-- > 0) { do_something(*argv++); } return 0; }
まぁ、普通のCプログラマなら読める。つうか、これぐらい読めてもらわないと困るわけだが、素直にインデックスを使ったほうが読みやすくないか?
int main(int argc, char **argv) { int i; for (i = 1; i < argc; i++) { do_something(argv[i]); } return 0; }
あと、参照の基点が実行時に書き換わっていくとデバッガで追っかけにくいという話もあるかな。あんまりデバッガ使わないからわからないけども。
まぁ、STL の iterator のように
for (p = first; p != last; p++) { do_something(*p); }
ってのならいいかもしれない。