-3

以下のプログラムを実行してみました。

#include<iostream>
using namespace std;
int main()
{
const int a = 0;
cout << &a <<endl;
int* ptr = const_cast<int*>(&a);
*ptr = 2;
cout << ptr <<endl;
cout << *ptr <<endl;
cout << a <<endl;
return 0;
}

出力は次のとおりです。

   0xbf92ebd8
   0xbf92ebd8
   2
   0

私が知っていることから、 const_cast は変更可能であるため、変更できます。*ptr を表示すると変更が反映されますが、aでは変更が反映されません。誰でも説明できますか?

編集:すべての回答をありがとう。未定義の動作を観察していることがわかります。そして、最初はmutableと *const_cast* を混同していました。それでは、どのようなシナリオで const_cast を使用するのか教えていただけますか?

4

2 に答える 2