C++中强行修改const常量的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中强行修改const常量的问题相关的知识,希望对你有一定的参考价值。
1、在main函数中我声明了一个int型const常量,然后利用const_cast将指向这个const常量的指针转化成了一个非const常量的int型指针,然后对该指针所指向的地址赋值,成功将原来为10的const常量变成了9,但是下面一个利用这个const常量初始化的变量b却还是10,难道是因为编译器在编译时自动将const常量使用固定值编译的原因吗?
2、我将利用const指针和引用传递进入函数的值进行了修改之后赋给新的变量,新的变量中保存的却是修改之后的值,与main函数中不同,这个又作何解释?
3、如果我将这个int型const常量声明为全局变量,发现对其修改会导致程序崩溃,这又是为什么呢?
程序代码如下:
void test_const(const int &c_a_in)
const int *ptr_c_a = &c_a_in;
int *ptr_a = const_cast<int *>(ptr_c_a);
*ptr_a = 8;
int b = c_a_in;
cout << "test_const:" << *ptr_c_a << " " << *ptr_a << " " << b << endl;
void test_const(const int *c_a_in)
int *ptr_a = const_cast<int *>(c_a_in);
*ptr_a = 7;
int b = *c_a_in;
cout << "test_const:" << *c_a_in << " " << *ptr_a << " " << b << endl;
int main()
const int c_a = 10;
const int *ptr_c_a = &c_a;
int *ptr_a = const_cast<int *>(ptr_c_a);
*ptr_a = 9;
int b = c_a;
cout << "main:" << *ptr_c_a << " " << *ptr_a << " " << b << endl;
test_const(c_a);
test_const(&c_a);
system("pause");
return 0;
下面这个问题和你的类似:
http://zhidao.baidu.com/question/1542038595309785347 参考技术A 返回const,则调用时也必须声明为const,防止返回的指针内容被修改。
以上是关于C++中强行修改const常量的问题的主要内容,如果未能解决你的问题,请参考以下文章