by
Anonymous Coward
on 2019年10月17日 20時05分
(#3702648)
https://twitter.com/shyouhei/status/1177407768430444545 [twitter.com] こちらの議論によると、"may be converted to a pointer to a different object type"の"different object type"にはconst修飾が異なる型も含まれるのでconst外しは可能、const付ける方だけわざわざ分けて書かれているのは歴史的経緯によるものらしい。
キャストでconstを外すのがバグではなく (スコア:1)
その結果定数メモリへの書き込みが発生するのがバグ
Re: (スコア:0)
非修飾型へのポインタを修飾型へのポインタにキャストするのは許容されているが、逆は未定義動作だろ
Re: (スコア:1)
すくなくともC++では未定義ではないな。
それ経由で書き込むと未定義。読むのはOK。
Re: (スコア:1)
C++は知らんが、Cではポインタの型変換について修飾付ける方向のしか規格に記載されていないから、const外しキャストは未定義動作になる。
strchrとか標準関数ですらreturn値でconst外してくるあたり、規格自体が狂ってる感はあるけども。
Re:キャストでconstを外すのがバグではなく (スコア:0)
https://twitter.com/shyouhei/status/1177407768430444545 [twitter.com]
こちらの議論によると、"may be converted to a pointer to a different object type"の"different object type"にはconst修飾が異なる型も含まれるのでconst外しは可能、const付ける方だけわざわざ分けて書かれているのは歴史的経緯によるものらしい。