1. ホーム
  2. c++

[解決済み] const_castは安全ですか?

2023-02-04 21:37:01

質問

に関する情報はあまり見当たりません。 const_cast . 私が見つけることができた唯一の情報(Stack Overflowで)です。

その const_cast<>() は変数のconst(ness) (またはvolatile-ness)を追加/削除するために使用されます。

これは私を不安にさせる。 を使うことは可能でしょうか? const_cast を使用すると、予期しない動作が発生する可能性がありますか? もしそうなら、それは何ですか?

あるいは、どのような場合に const_cast ?

どのように解決するのですか?

const_cast が安全なのは、元々非正規の const . 例えば、ある関数がパラメータとして const char * を受け取る関数があり、そこに変更可能な char * を渡すと、それは安全です。 const_cast に戻すことができます。 char * に戻し、それを修正します。 しかし、もし元の変数が実際には const であったとすると const_cast を使用すると、未定義の動作になります。

void func(const char *param, size_t sz, bool modify)
{
    if(modify)
        strncpy(const_cast<char *>(param), sz, "new string");
    printf("param: %s\n", param);
}

...

char buffer[16];
const char *unmodifiable = "string constant";
func(buffer, sizeof(buffer), true);  // OK
func(unmodifiable, strlen(unmodifiable), false); // OK
func(unmodifiable, strlen(unmodifiable), true);  // UNDEFINED BEHAVIOR