引用变量存储在哪里[重复]

2023-11-21

我知道引用不会占用任何内存,它会指向它所引用的同一内存位置。 例如

int i=10;
int &r = a;

suppose i指向内存位置 1000 所以在这种情况下r也将指向内存位置 1000。 但在 C++ 中,每当我们声明一个变量时,它都会存储在内存中的某个位置。 在这种情况下r指向某个位置,但它应该通过某种内部表示存储在内存中的某个位置。 提前致谢。


这是有充分理由的,但没有具体说明。真正的答案是:这取决于参考。它可以表示为普通指针,也可能根本不存在。

如果您有一个具有自动存储持续时间的函数本地引用,例如这个r:

void foo()
{
  int x[4] = {0, 1, 2, 3};
  int &r = x[1];
  // more code
}

那么它可能根本不会占用任何空间。编译器将简单地处理所有使用r作为别名x[1],并访问该int直接地。请注意,这种别名样式的引用也可以由函数内联产生。

另一方面,如果引用是“持久的”或对其他翻译单元(例如数据成员或全局变量)可见,则它必须占用一些空间并存储在某处。在这种情况下,它很可能被表示为一个指针,并且使用它的代码将被编译以取消引用该指针。

理论上,其他选项也是可能的(例如查找表),但我认为任何现实世界的编译器都不会使用这些选项。

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

引用变量存储在哪里[重复] 的相关文章

  • 反序列化 GUID 数组时出现 JSON.NET 异常

    我正在使用 JSON NET 反序列化从浏览器发送的 AJAX HTTP 请求 并且在使用 Guid 作为参数的 Web 服务调用时遇到问题 当我使用内置的 NET 序列化器时 这工作得很好 首先 流中的原始字节如下所示 System Te
  • 从 WatchOS 捕获 Apple Watch 的型号标识符

    似乎没有任何记录的官方方法可以从手表应用程序获取 Apple Watch 模型 但有一篇文章显示了特殊用途sysctlbyname 如何确定Apple Watch型号 https stackoverflow com questions 49
  • pop() 期间提升 Fibonacci 堆访问冲突

    Context 我目前正在实现某种形式的 A 算法 我决定使用 boost 的斐波那契堆作为底层优先级队列 我的图表是在算法运行时构建的 作为我使用的顶点对象 class Vertex public Vertex double double
  • 使用“对‘boost::system::get_system_category()’的未定义引用”链接到 boost barfs

    我在静态链接使用 boost 1 35 库的应用程序时遇到问题 我使用的是 Linux debian Lenny box 带有 G 4 3 2 链接无 static工作顺利 具体来说 g Wall Wextra pedantic ggdb3
  • 如何正确使用memcpy?

    我有一个mainbuf bufsize 最初为空 我正在阅读一些输入 read fd otherbuf sizeof otherbuf 分配给不同的字符串otherbuf 每次我分配一个新字符串给otherbuf我想将其附加到mainbuf
  • 如何使用仿函数作为类模板中的成员?

    我试图使用函子作为std function类模板内的对象 以下是我到目前为止所做的事情 the functor class template template
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • 创建一个从用户机密获取连接字符串的 DbContextFactory

    使用 DotNetCore 解决方案WebApi项目和一个单独的Data包含实体框架实现的项目 我们一直在升级库 因此我们使用所有最新的核心内容 In the Data项目 我们创建了一个ApplicationDbContextFactor
  • 无符号长十六进制表示

    include
  • 编译器错误? g++ 允许可变大小的静态数组,除非函数是模板化的

    下面的代码演示了我无法解释的 gcc 4 6 2 的行为 第一个函数声明一个 vec t 类型的静态数组 其中 vec t 是 unsigned char 的 typedef 别名 第二个函数是相同的 只是 vect t 的类型是模板参数
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 对双向链表进行排序 C++

    尝试通过遍历列表的循环来完成此操作 在循环中 我将头节点输入到我定义的排序函数中 然后使用 strcmp 来确定节点中的哪个名称是否应该排在前面 它不起作用 因为写得太早了 我通过一次沿着列表一个节点进行线性比较 而不是回去查看第一个节点是
  • 网页上的富文本编辑器

    我正在尝试在我的网页中添加一个富文本编辑器 用户可以在其中撰写评论并格式化他们所写的内容 类似于我们在此网站上撰写帖子的编辑器 谁能指出我关于此的正确方向 任何可以帮助我构建这样一个组件的教程 我还想要一个免费的产品 忘记之前提到 类似的东
  • 运行 SQL Server 报告服务时如何解决“远程服务器返回错误:(401) 未经授权”?

    我正在用这个code http www codeproject com Articles 25994 Creating a Proxy to Download PDF Reports from SRS从 SSRS 创建和下载 PDF 报告
  • 如何隐藏鼠标光标?

    我想问是否有人可以为我提供一个 C 代码 在其中我可以在按下特定键时隐藏 显示鼠标指针 我发现一些只为 TURBO C 编写的代码 它们都不能使用 dev c 甚至 Visual c 编译和运行 我尝试运行在 Dev C 中找到的代码 但我
  • .NET Compact Framework 上的 DateTime.Now 中的毫秒始终为零?

    我想要一个时间戳对于日志Windows 移动项目 精度必须至少在一百毫秒范围内 然而我打电话给DateTime Now返回一个DateTime对象与Millisecond属性设置为零 还有Ticks属性相应地进行四舍五入 如何获得更好的时间
  • 用于 DSP 的快速 2D 卷积

    我想实现一些图像处理算法 这些算法旨在运行在小猎犬板 http en wikipedia org wiki Beagle Board 这些算法广泛使用卷积 我正在尝试为 2D 卷积找到一个好的 C 实现 可能使用快速傅里叶变换 我还希望该算
  • 在 Angular 6 和 ASP.net 中启用 CORS

    我正在尝试从 Angular 6 应用程序向发送电子邮件的 API 发送 POST 请求 我用邮递员测试了该请求并且它有效 但是当我在 Angular 应用程序中执行 POST 请求时 我的控制台中出现错误 我在 Angular 应用程序中
  • 使用 CRTP 模式时继承中的不明确方法

    我正在定义一个DoubleWrapper类继承自两个 CRTP 基类 Ratioable and Divable 两者都定义operator 具有不同的签名 T operator double const scalar const retu

随机推荐

  • 在 Java 中将 UTC 时间转换为本地时区

    我知道这个主题已经被打死了 但在搜索了几个小时后我不得不问这个问题 我的问题 根据客户端应用程序 iPhone 的当前时区对服务器上的日期进行计算 客户端应用程序以秒为单位告诉服务器其时区距 GMT 有多远 然后我想使用这些信息来计算服务器
  • 具有两个不相等(唯一)类型的泛型类

    是否可以实现一个仅限于两个唯一通用参数的类 如果不是 是因为它未实现还是因为给定的语言结构 继承 是不可能的 我想要以下形式的东西 class BidirectionalMap
  • GIT 不会从远程提取最新更改

    不知何故 我的本地分支比远程分支晚了 8 个月 当我做git pull origin my branch name 它说Already up to date I tried git fetch origin my branch name t
  • 在哪里可以获得 UNIX 系统调用列表?

    UNIX 上的系统调用列表在哪里 这不是我最初的问题 但无论如何还是谢谢 man 2 syscalls 除此之外 您可以查看 usr include sys syscall h 在我的系统上仅 includes usr include bi
  • Spring Security - 白名单IP范围

    我查看过的许多资源和 stackoverflow 问题都提供了使用的答案 xml files 使用 Spring Security 的 IP 过滤器 http websystique com spring security spring s
  • 检查某个项目是否在嵌套列表中

    在一个简单的列表中 以下检查是微不足道的 x 1 2 3 2 in x gt True 但如果是列表的列表 例如 x 1 2 3 2 3 4 2 in x gt False 如何解决这个问题才能返回True 尝试一下 使用内置的any功能
  • Android 自定义带开关的弹出菜单

    如何自定义弹出菜单中的菜单项 我需要第一个菜单项的开关 这是我到目前为止得到的 menu xml menu menu
  • 可选类型“$T11”不能用作布尔值;自安装 XCode 6 beta 7 以来测试 '!= nil'

    这是我收到错误的代码 for key value in info let fieldValue AnyObject value if fieldValue fieldValue length 0 this line gives the er
  • 如何从另一个 Windows 应用程序获取 Chrome 28 的当前 URL?

    在 Chrome V27 之前 您可以枚举 Chrome 子窗口控件以访问编辑字段并从那里读取字符串值以获取当前打开的 URL 不幸的是 Chrome 28已经切换到新的渲染引擎 Blink 除了主窗口 Chrome WidgetWin 1
  • 使用 cin 将输入作为函数参数传递

    我的程序 class test int k public void changeval int i k i int main test obj int i cin gt gt i obj changeval i return 0 有什么方法
  • char* 和 int* 之间的区别

    有什么区别char and int 当然 它们是不同类型的 但我怎么能写 char s1 hello world as hello world 它不是一个字符 而是一组字符 我不能写 s1 as char s1 h e l l o w o
  • Java中两个List的有效交集?

    问题很简单 我有两个列表 List
  • “.equals”和“==”有什么区别? [复制]

    这个问题在这里已经有答案了 我今天换了讲师 他对我说使用了一个奇怪的代码 他说最好用 equals当我问为什么时 他回答说 因为是这样 这是一个例子 if o1 equals o2 System out println Both integ
  • jQuery 上下文菜单 - 查找触发它的元素

    我正在尝试为我的页面编写一个上下文菜单选项 基本上 右键单击 div 会弹出一个选项菜单 可用于执行任务 我的问题是试图找到触发所有内容的原始元素 即右键单击的 div 我的 jQuery 代码或多或少是 this is what disp
  • 用 Java 创建自定义 JButton

    有没有办法创建一个JButton使用您自己的按钮图形而不仅仅是按钮内的图像 如果没有 是否有其他方法来创建自定义JButton在java中 当我第一次学习 Java 时 我们必须制作 Yahtzee 我认为创建自定义 Swing 组件和容器
  • 使用 Firebase 获取 downloadURL 不断抛出错误“XMLHttpRequest 未定义”

    当尝试获取刚刚上传到存储的图像的 downloadURL 时 我不断收到 XMLHttpRequest 未定义 消息 对这里发生的事情有什么想法吗 我可以检索元数据 但图像 url 未在方案中列出 Node import firebase
  • 将具有唯一 id 属性的对象数组转换为 Map

    我有一个对象数组 其中每个对象都有一个名为的唯一成员id 如何创建地图id如果地图的钥匙 您想将数组减少为地图 const arr id 1 id 2 id 2 const map arr reduce acc item gt acc se
  • 如何从应用程序客户端连接远程 EJB 模块

    我的计算机上的远程 Glassfish 服务器和应用程序客户端中有一个 EJB 模块 我想从应用程序客户端连接到远程 EJB 这是我的 EJB 界面 Remote public interface BookEJBRemote public
  • 使用cowplot和ggplot2在某些行周围绘制边框

    我想以某种方式表明多面板图中的某些行应该一起比较 例如 我想绘制这个图 如下图所示 用 PowerPoint 制作的面板周围有方框 这是我为使用第一个图而编写的代码 我使用了ggplot和cowplot require cowplot th
  • 引用变量存储在哪里[重复]

    这个问题在这里已经有答案了 我知道引用不会占用任何内存 它会指向它所引用的同一内存位置 例如 int i 10 int r a suppose i指向内存位置 1000 所以在这种情况下r也将指向内存位置 1000 但在 C 中 每当我们声