C++从const int*转换为int*处理意外结果

Muk*_*esh 4 c++ pointers const type-conversion

在c ++中,我们知道我们不能将const int*转换为int*.但我有一个代码片段,我可以将const int*转换为int*.我是c ++的初学者,我用谷歌搜索了这个,但我只是提到const int*的链接无法转换为int*以避免const违规.我无法弄清楚为什么编译没有错误

#include <iostream>
using namespace std;

int main(void)
{
    const int a1 = 40;
    const int* b1 = &a1;
    int* c1 = (int *)(b1);
    *c1 = 43;
    cout<< c1<<" "<< &a1<<endl;
    cout<< *c1<<" "<< a1<<endl;
 }
Run Code Online (Sandbox Code Playgroud)

另外,问题是上述程序的输出是:

0x7fff5476db8c 0x7fff5476db8c
43 40
Run Code Online (Sandbox Code Playgroud)

有人可以解释c1整数指针指向a1的相同地址但分别具有不同的值43和40.

gna*_*729 5

在C++中,对象是const,或者不是.如果它是const而不是任何修改它的尝试将调用未定义的行为.那就是你做的.那时任何事情都可能发生.如果你很幸运,它会崩溃.如果你不那么幸运,它会正常工作,直到你的代码在客户手中,它会造成最大的损害.

您可以在C++中轻松地将const int*转换为int*.你做的就是.但是,"const int*"和"int*"并不意味着指向的东西是const.它只是意味着编译器不允许您在一种情况下进行分配,并允许您在另一种情况下进行分配.*c1const.将指针强制转换int*并不会改变它的实际情况const.未定义的行为.