|
>根拠としてはみなさんがあげておられる部分とまったく同じです。
>しかしならが、逆もまたいえるわけです。
同じ?逆?
どの部分が同じで,どの部分の逆を言えると言いたいのですか?
そういうことを示すために引用を行うのです。
>割と複雑なポインタに対して*をつけるとどのような型になるか
>うまくイメージできない人たちへのトレーニングとしては非常に
>有効であると考えます。
どういう風に書くと,どのようなトレーニングになるのでしょうか。
そもそも,正しく*演算子を適用しておけば,
キャスト自体がいらないのですから。
>そういうことができてしまうから
>使わないほうが良いではなく、正しい型認識のトレーニングと
>して使うという考え方はいかがでしょうか。
「正しい型認識のトレーニング」という方法にキャストは使えませんよ。
キャストは型を強引に変換してしまうため,
型が正しくても正しくなくても通ってしまいます。
>本当に重要なキャストが埋もれてしまうという指摘ですが、
>これは周りにコンパイラをだますようなキャスト書いている
>プログラマがいるかもという疑念が晴れば考える必要はないの
>ではないですか。(重要ならコメント入れてもいいでしょうし)
そもそも,キャスト,特にC++でいうreinterpret_castに相当するキャストを使うなら,
全てコメントを入れるべきだと思います。
コンパイラの静的型システムによる保護を捨て去るのですから,
「何故そういうことをするのか」の説明は必要だと考えます。
Microsoft Windowsでプログラムを書くと,reinterpret_cast相当のキャストはいくらでも出てきますけどね。
>コード自体にドキュメント性を持たせる上でも有効とかんがえますが
>みなさんはどうでしょう?
ドキュメント性を持たせるためには,無意味な行動は行うべきではないです。
NULLのキャストは,コードのドキュメント性を下げます。
つまり,空ポインタ定数は特殊であるということをきちんと認識している人間にとって,
キャストがあると「何のためのキャストか」を考える必要が出てきます。
Cプログラマなら当然知っておくべきことを知らない人間に対して,
ドキュメント性を持たせてもしょうがないでしょう。
そのような事をやるなら,
i++; /* iの値に1を足してiに格納する */
という,馬鹿馬鹿しいことをしないといけませんから。
|