Cでのキャストは独特で、他の言語とはまったく異なります。また、決してインテリジェントではありません。
Cでのキャストは、慎重に定義されたルールを使用して、あるタイプから別のタイプに値を変換します。本当に知る必要がある場合は、標準を読んでください。それ以外の主なポイントは次のとおりです。
- 可能な場合、整数型間の変換では値が保持されます。宛先のビット数が多い場合、これは広くなり、一般に安全ですが、符号拡張が含まれる場合があります。狭い場合、ビットは失われます。
- ポインタータイプ間の変換ではポインター値が保持されますが、結果は未定義であることが多く、移植性がないことが多く、高度なシナリオに役立つことがよくあります。
- 整数型とポインター間の変換は、整数が十分に大きく、ビットパターンを保持していれば問題ありません(それが意味するものは何でも)。整数が小さすぎる場合、結果は未定義ですが有用ではありません。原則として、「long」は「void *」に対して十分な幅ですが、保証はありません!この方法で作成されたポインターは、あらゆる種類の興味深い方法で無効になる可能性があります。
- float型と整数型の間の変換は、適切なライブラリルーチンで定義された算術変換です(丸めではなく、切り捨てを使用)。
- 関数の戻り値をvoidにキャストできます。持ってない 何もしません。
一部のキャストは暗黙的に適用され、一部のキャストではコンパイラが警告を発行します。警告に注意するのが最善です!
役に立たないため、キャストの辞書定義は無視するのが最適です。多くのキャストは、変換または強制という用語でよりよく説明されているため、それらも知っておく価値があります。
C ++はもっと複雑ですが、そうではないのですか?