以下のプログラムを実行してみました。
#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 を使用するのか教えていただけますか?