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.
在C++中,对象是const,或者不是.如果它是const而不是任何修改它的尝试将调用未定义的行为.那就是你做的.那时任何事情都可能发生.如果你很幸运,它会崩溃.如果你不那么幸运,它会正常工作,直到你的代码在客户手中,它会造成最大的损害.
您可以在C++中轻松地将const int*转换为int*.你做的就是.但是,"const int*"和"int*"并不意味着指向的东西是const.它只是意味着编译器不允许您在一种情况下进行分配,并允许您在另一种情况下进行分配.*c1
是const
.将指针强制转换int*
并不会改变它的实际情况const
.未定义的行为.
归档时间: |
|
查看次数: |
1341 次 |
最近记录: |