const_cast を使用してポインターの const-ness を削除することは避けるべきであることは誰もが知っていることです。
しかし、その逆はどうでしょうか。
私の使用例では、const 以外のソース バッファーからデータ (バイト) をコピーする関数があります。そのソース バッファーに従ってパラメーターを完全に const として宣言することは、適切な設計上の決定であると考えました。
void copyfunction(const char* const data) { ... }
以下のような関数呼び出しでは、ポインタ型エラー 'const char* const <-> char*' が発生します。
void main() {
char sourcebuffer[] = {0x00};
copyfunction(sourcebuffer);
}
確かに、これで単純にsourcebuffer
as const を宣言できましたが、私の場合、別のコードの場所 (外部ライブラリ) からのものであるため、その変数にアクセスできません。
void main() {
char sourcebuffer[] = {0x00};
copyfunction(const_cast<const char* const>(sourcebuffer));
}
ただし、それを超えるコードは機能しますが、それは良いスタイルですか (私のユースケースによると)?
as constのパラメーターを宣言するcopyfunction
ことで、ユーザーはポインターまたはソースバッファー自体の場所を変更 (読み取り専用) しないことが保証されると思いました。したがって、この場合、 const_cast は、関数呼び出しを有効にするために必要な悪にすぎず、ポインターの const-ness を意図的に削除することはありません...
あいさつ