C++中的const_cast

来源:百度知道 编辑:UC知道 时间:2024/07/07 16:59:52
#include<iostream>
#include<string>
using namespace std;
int main()
{
const int num=1;
int *p=const_cast<int *>(&num);
*p=2;
cout<<num<<endl;//输出1
cout<<*p<<endl;//输出2
// 但&num和p却是相同的这是为什么?
cout<<&num<<endl;
cout<<p<<endl;
}
我想要强调的是为什么指针P和&num是相同的,但*p却和num不同,同一个地址怎么会有不同的两个值

通常C++是不为const分配存储空间的!
而是把定义保存在符号表里。而且,进符号表时就被初始化了,此例中,符号 num 的值永远只会是 1。

使用指针(取地址)则是强制分配空间!但得到的和之前的const已经不是一回事。因为虽然强制分配了空间,但程序中的const仍用符号表里的。

C++够灵活吧!

const_cast 就是去掉原来的 const 界定, int *p=const_cast<int *>(&num);
这句以后, num 就不是 const 的了。

const_cast 只有这一个用处。