const变量取地址-引起的疑惑

const变量取地址-引起的疑惑

一下代码输出什么?

 const int i = 1;  int *j =(int*) &i;  *j = 22;  cout << &i << " " << j << endl;  cout << i << " " << *j << endl;

const变量的地址取值后 发现结果竟然不一样 既然是同一个地址 为什么会是不同的结果,初步认为是数据存储区不一样的问题,然后进一步发现非也。

 既然最初设计为const 那么开发者肯定不想对这个变量修改 那么编译器可以优化为 立即数 替 换原来引用 的地方 从而提高效率,之后上面代码为

const int i = 1;  int *j =(int*) &i;  *j = 22;  cout << &i << " " << j << endl;  cout << 1 << " " << *j << endl;

volatile 告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从内存中读取,因而编译器生成的可执行码会重新从i的地址读取数据 

volatile  关键字可以  禁止编译器这种优化行为

但是对于new 这种const 值是无法确定的 所以编译器无法优化 ,如下例

   int * const  i = new int;  int *j = (int*)i;  *j = 22;  cout << i << " " << j << endl;  cout << *i << " " << *j;

限制的i的值 运行期才能决定 所以编译期 编译器无法优化,也就不存在那个”疑惑“了

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/654545

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109087.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 如何查看Linux版本信息?

    如何查看Linux版本信息?这里所谓的Linux版本信息,包括Linux内核版本信息和Linux系统版本信息。下面分别介绍>>>(笔者在Ubuntu12.04中进行操作并截图如下)一、查看Linux内核版本信息方法1:登陆Linux,在终端输入cat/proc/version方法2:登陆Linux,在终端输入uname-a方法3:登陆Linux,在终端输入uname

  • 点对点通信-简介

    点对点通信-简介点对点连接是两个系统或进程之间的专用通信链路。想象一下直接连接两个系统的一条线路。两个系统独占此线路进行通信。点对点通信的对立面是广播,在广播通信中,一个系统可以向多个系统传输。电话呼叫是面向电路的两部电话机之间的点对点链路。但是,呼叫通常是通过电话公司中继线多路复用的;因此虽然电路本身可能是虚拟的,但用户在进行点对点通信会话。端到端连接是指通过交换网络的两个系统间的连接。例如,因

  • [总结]视音频编解码技术零基础学习方法

    [总结]视音频编解码技术零基础学习方法一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术。需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西。

  • discuz的diy功能介绍

    discuz的diy功能介绍

  • gis地理加权回归步骤_地理加权回归权重

    gis地理加权回归步骤_地理加权回归权重内容导读1)回归概念介绍;2)探索性回归工具(解释变量的选择)使用;3)广义线性回归工具(GLR)使用;*加更:广义线性回归工具的补充内容4)地理加权回归工具(GWR)使用+小结。说明:本节是这个学习笔记最后一部分。PART/04地理加权回归工具(GWR)使用上一节我们讲了GLR广义线性回归,它是一种全局模型,可以构造出最佳描述研究区域中整体数据关系的方程。如果这些关系在研究区域中是一致的,则GLR回归方程可以对这些关系进行很好的建模。不过,当这些关系在研

  • Java学习之SpringMVC 拦截器

    Java学习之SpringMVC拦截器0x00前言继续SpringMVC最后一点小内容,后面就该学习如何整合SSM框架了。0x01拦截器拦截器和前面提到的一个过滤器类似,但是他们还是

    2021年12月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号