在c++中,我们知道我们不能将const int*转换为int*。但我有一个代码片段,可以将 const int* 转换为 int*。我是 C++ 的初学者,我在 google 上搜索了这个,但我刚刚得到了提到 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;
}
另外,问题是上述程序的输出是:
0x7fff5476db8c 0x7fff5476db8c
43 40
有人可以解释一下 c1 整数指针指向 a1 的相同地址,但分别具有不同的值 43 和 40 。
在 C++ 中,对象要么是 const,要么不是。如果它是 const ,则任何修改它的尝试都会调用未定义的行为。这就是你所做的。在那时候anything可以发生。如果你幸运的话,它会崩溃。如果您不那么幸运,它会正常工作,直到您的代码到达客户手中,并造成最大可能的损害。
在 C++ 中,您可以轻松地将 const int* 转换为 int*。你刚刚做到了。然而,“const int*”和“int*”并不意味着所指向的东西是否是const。它只是意味着编译器不会让您在一种情况下进行分配,而会让您在另一种情况下进行分配。*c1
is const
。将指针投射到int*
并没有改变它的事实const
。未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)