[C/C++]用const_cast修改const变量会得到什么结果?

const int x=4;
int& y = const_cast<int&>(x);
++y;

这时访问x,x会是多少呢?

根据C++11标准7.1.6.1.4:

Except that any class member declared mutable (7.1.1) can be modified, any attempt to modify a const
object during its lifetime (3.8) results in undefined behavior. (ISO/IEC 14882:2011)

尝试通过const_cast消除const来修改x的值有程序崩溃的可能,虽然在某些平台上可能会输出4(编译期间优化)。

同样,下面的code也是不安全的:

const int x=4;
int& y = (int&)x;
++y;
时间: 2024-09-29 05:23:11

[C/C++]用const_cast修改const变量会得到什么结果?的相关文章

修改const变量

看下面的一段代码 1 const int i=0; 2 int * j=(int*)(&i); // 运行正确,j确为i的地址,但 int *j=&i; 编译错误 3 *j=1; //确实改变了i的值 4 printf("%d %d\n",i,*j); //输出0 1 第三行代码执行后,i的值确实已经改变 然而printf的结果确实0 1,这是因为,在C++中对于const变量,在编译期就进行了替换,运行的时候printf中i已经被替换为0了,而*j是从内存中从新取值.

const变量探究

同样的一段代码,在c和c++中的表现却不相同. #include <stdio.h> #include <stdlib.h> int main() { const int i = 1; int *j =(int *) &i; *j = 0; printf("%d,%d\n", i,*j); system("pause"); } 当用c编译器编译运行时,结果是0,0 当用c++编译器编译运行时,结果是1,0 原因:c语言中const变量

mutable用于修改const成员函数中的成员变量

http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,

C/C++ const变量的修改

C语言中的const是运行时const,编译时只有定义,只用在运行时才会初始化,这也是为什么const不能用来定义数组的原因,并且const的值也是可以动态修改的. C++中的const是编译时const,故能够用来初始化数组,企图修改const的值是未定义的,如果要修改const的值只能改变const变量的声明方式为 const volatile c=10. 测试用例: const int ci=10; int *j =(int *)&ci; *j=100; printf("%d,%d

(转)const变量通过指针修改问题

程序笔试题-const变量通过指针修改问题 2012-10-06 20:45:18 分类: C/C++ const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改. 以下是VC6下才测试. 1 不能修改的情况 #include <stdio.h>int const a = 10;void main(void){ int *p = (int*)&a; *p = 20; printf("%d\n", *p);} 程序编译通过,但运行时错误: 指示

const变量的修改实践

https://bbs.csdn.net/topics/110049293 #include <iostream> using namespace std; int main(){ cout << "const变量实践:" << endl; // 必须加 volatile才会改变 const volatile int a111 = 1; *((int*)&a111) = 22222; cout<<a111<< endl

const与指针修改const对象

我们都知道const对象作用是声明变量为常量,在程序中除非显示转换,否则无法修改. 本文针对显示修改的情况,提醒了一种隐式的错误,以及解决办法. 考虑下面的代码: #include<iostream> int main(){ const int a=0; int *p=const_cast<int*>(&a);//&a返回int *,const_cast<int*>显示转换为int*. *p =1; int b=*p; int c=a; std::cou

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

主要内容:const变量初始化.数组大小用const变量细节.const变量与#define宏.volatile修饰 一.const变量初始化时必须赋值 二.const变量在C++中可以做数组大小元素.在C中不行,因为它是变量 三.const和#define区别:内存分配 四.volatile修饰一些变量:易被操纵系统.硬件.多线程修改的变量 #include <stdio.h> int main() { /* 测试1 */ const int b; // 不初始化会报错 // b = 2;

const变量赋值报错分析

const变量赋值报错分析 const变量赋值报错 从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会报错: error: invalid conversion from `char**' to `const char**' 示例: int main(int argc, char *argv[]) { char a = '1'; const char b = a; char * a2 = "1234