为什么某些 C++ 编译器允许您获取文字的地址?

2023-12-10

我不会透露名字的 C++ 编译器可以让你获取文字的地址 int *p = &42;

显然 42 是一个右值,大多数编译器拒绝这样做。

为什么编译器会允许这样做?除了搬起石头砸自己的脚之外,你还能做什么呢?


如果您需要一个指向值为 42 的整数的指针怎么办? :)

C++ 引用很像自动取消引用的指针。人们可以创建对文字的常量引用,如下所示:

const int &x = 42;

它实际上要求编译器使用值为 42 的整数的地址初始化指针,您随后可能会这样做:

const int *y = &x;

结合这一事实,编译器需要有逻辑来区分尚未获取地址的值和已获取地址的值,以便它知道将其存储在内存中。第一个不需要有内存位置,因为它可以完全是临时的并存储在寄存器中,或者可以通过优化来消除。获取值的地址可能会引入编译器无法跟踪的别名并抑制优化。因此,应用&运算符可以将值(无论它是什么)强制写入内存。

因此,您可能发现了一个结合了这两种效果的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么某些 C++ 编译器允许您获取文字的地址? 的相关文章

随机推荐

  • 什么是堆栈溢出错误?

    什么是StackOverflowError 是什么原因造成的 应该如何处理 参数和局部变量分配在stack 对于引用类型 对象位于heap堆栈中的变量引用堆上的该对象 堆栈通常位于upper地址空间的末尾 当它用完时 它会流向bottom地
  • Flutter Web - 获取 Firestore 集合

    我有一个 flutter 移动应用程序 效果非常好 但是当尝试将相同的代码迁移到 flutter web 时 我无法使用 就像 StreamBuilder 不想在 Web 模式下工作 而只适用于移动应用程序模式 在 dart 文件的顶部 我
  • 如何使用 Selenium 单击 cloudflare 的“验证您是人类”复选框挑战

    我需要使用 Python 自动下载此网页中的 csv 文件 https pace coe int en aplist committees 9 commission des questions politiques et de la dem
  • 是否可以在onTaskRemoved中执行网络任务?

    我需要当我的应用程序完全关闭 从后台清除 时将我的请求发布到服务器 并且当响应服务停止工作时 这是我的服务类 public class OnClearFromRecentService extends Service private Sha
  • 如何在 Swift 中使 NSBundle 的缓存失效

    当我尝试本地化字符串时 它返回以前的值 我发现在这个帖子您实际上必须使缓存无效 或多或少这是我尝试过的代码 里面localizableStringsPath该文件实际上显示了我从 inet 下载的翻译 但捆绑包返回了以前的值 我必须关闭应用
  • JS 异步/等待 vs Promise vs 回调

    我试图理解这 3 个回调和承诺之间的区别 但我不明白 async await 的用法 我知道这是承诺的语法糖 但我尝试过的方法没有用 我正在分享我试图理解这一切的一段代码 我尝试过使用数组 var array 1 2 3 和 2 个功能 g
  • 如何“安装”log4j 包?

    我已经下载了 Eclipse 插件的代码 该代码使用 log4j 但它不仅仅将其用作库 称为 jar 而是用作 捆绑包 所以它无法编译 原因如下 无法解析捆绑包 org apache log4j 我不太确定解决这个问题的正确方法是什么 我知
  • 如何验证坐标是否在列表中

    我正在生成随机坐标并添加到我的列表中 但首先我需要验证该坐标是否已经存在 我正在尝试使用member但是当我调试时我发现它不起作用 我的代码基本上是这样的 L is a list and Q is a count that define t
  • 如何在 Spring Data 存储库上测试 Spring 的声明式缓存支持?

    我开发了一个Spring数据存储库 MemberRepository接口 扩展org springframework data jpa repository JpaRepository MemberRepository有一个方法 Cache
  • Google 应用引擎多种语言

    在谷歌应用程序引擎中 是否可以用两种不同的语言编写应用程序 例如蟒蛇和PHP 我对 Google 应用引擎非常陌生 不知道如何去做 如果可以的话会收取任何费用吗 是的 你可以使用modules 每个模块可以是不同的语言 仅当您超过免费配额时
  • 创建输入作为输入的子项

    是否可以创建一个作为文本子项的按钮
  • 如何从 jqGrid 列获取单元格值以对背景色进行条件格式设置

    我正在使用 jqGrid 树网格 我想根据单元格中数据的值 它是一个整数 来格式化列的背景颜色 这是我设置列的示例 name missingBooks cellattr function rowId tv rawObject cm rdat
  • sqoop 和使用密码文件选项的密码加密

    我正在使用 sqoop 1 4 3 cdh4 6 0 jar 我想知道 password file 选项在该版本中是否可用 如果是 有人能给我一个如何调用加密过程的例子吗 提供一个命令示例 我可以看到该补丁已在cdh4 6 0中引入 但不确
  • 如何有效地查找 PySpark 数据框中每列的 Null 和 Nan 值的计数?

    import numpy as np data 1 1 None 1 2 float 5 1 3 np nan 1 4 None 1 5 float 10 1 6 float nan 1 6 float nan df spark creat
  • 如何在iphone中给图片添加素描效果?

    我正在实现一个iPhone应用程序 其中我实现了以下功能 选择照片 拍摄照片 现在我想为那张照片提供素描效果 例如这个 我怎么能这样做呢 如果我可以再次推荐它 我的开源GPUImage框架有一个内置的过滤器可以做到这一点 GPUImageS
  • 如何让 twilio 呼叫代理以将他们连接到队列中的呼叫者?

    来自 twilio 文档和tutorial客服人员不会知道有人在队列中 因此只有当队列中始终有人并且客服人员整天坐在那里进行现场呼叫时 这才有效 客观的 当有人打电话时 我想将呼叫连接到代理 如果客服人员不在 请将呼叫者添加到队列中 如果有
  • Charts.js 会自动添加逗号作为千位分隔符,但本不该添加

    Charts js is abusively adding comma separator between thousands while is nowhere set to do this To all floats To the axi
  • linux open调用返回EINVAL的可能原因

    我试图在我的源代码中进行系统调用 如下所示 int file file open argv index O RDONLY 其中命令行参数是我的文件系统中二进制文件的路径 但这个电话让我EINVAL错误 我已检查文件是否存在以及访问该文件所需
  • Asp.Net 4.0在SqlServer中存储会话

    我有共享托管提供的数据库 我想将会话存储在 sql server 中 但它给了我错误 Unable to use SQL Server because ASP NET version 2 0 Session State is not ins
  • 为什么某些 C++ 编译器允许您获取文字的地址?

    我不会透露名字的 C 编译器可以让你获取文字的地址 int p 42 显然 42 是一个右值 大多数编译器拒绝这样做 为什么编译器会允许这样做 除了搬起石头砸自己的脚之外 你还能做什么呢 如果您需要一个指向值为 42 的整数的指针怎么办 C