入力パラメータの1つがchar const* buffer
のC++関数を持っています。私が理解しているのは、この配列の基になる値を変更することができますが、ポインタ自体を別のものを指すように移動することはできないということです。異なるタイプ間のconstポインタのキャスト
ここでは、この配列をunsigned short
と解釈し、いくつかの操作を行います。だから私は次のようなことをします:
char const * current = &buffer[currentLine]; // Points to some location
unsigned short * const values = static_cast<unsigned short * const>(current);
// Change some of these values
この結果、invalid cast from top char * const to type short unsigned int * const
になります。
このキャスティングはどのように実行する必要がありますか?
私は 'reinterpret_cast'を実行してもOKです。誰かがそれがなぜそんなに説明できますか? – Luca
です。「reinterpret_cast」はエイリアシングルールに違反しているため、このキャストを実際に悪いアイデアであってもキャストすることを意味しているためです。一連のバイトを何らかの他の型として再解釈するために定義された方法は、それらのバイトをあらかじめ割り当てられた '' unsigned short''の初期化されていない配列(例えば、 –
...またはもちろんreadもともと 'SomeOtherType'がなければ' char * 'から' SomeOtherType * 'にキャストします(注:逆はOKです)。 –