C++ 参考——它们只是语法糖吗?

2024-01-28

C++ 参考只是语法糖,还是在某些情况下提供任何加速?

例如,无论如何,指针调用都涉及副本,对于引用调用似乎也是如此。基本机制似乎是相同的。

编辑:在大约六个答案和许多评论之后。我仍然认为引用只是语法糖。人们是否可以直接回答“是”或“否”,以及是否有人可以做出可接受的答案?


假设引用作为指针:

  1. 不能为 NULL
  2. 一旦初始化,就不能重新指向其他对象
  3. 任何使用它的尝试都会隐式取消引用它:

    int a = 5;
    int &ra = a;
    int *pa = &a;
    
    ra = 6;
    
    (*pa) = 6;
    

这是反汇编时的样子:

    int a = 5;
00ED534E  mov         dword ptr [a],5  
    int &ra = a;
00ED5355  lea         eax,[a]  
00ED5358  mov         dword ptr [ra],eax  
    int *pa = &a;
00ED535B  lea         eax,[a]  
00ED535E  mov         dword ptr [pa],eax  

    ra = 6;
00ED5361  mov         eax,dword ptr [ra]  
00ED5364  mov         dword ptr [eax],6  

    (*pa) = 6;
00ED536A  mov         eax,dword ptr [pa]  
00ED536D  mov         dword ptr [eax],6  

从编译器的角度来看,分配给引用与分配给取消引用的指针是同一件事。正如您所看到的,它们之间没有区别(我们现在不讨论编译器优化) 然而,如上所述,引用不能为空,并且对它们包含的内容有更强的保证。

对于我来说,只要不需要,我更喜欢使用参考文献nullptr作为有效值,应重新指向的值或要传递的不同类型的值(例如指向接口类型的指针)。

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

C++ 参考——它们只是语法糖吗? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • 使用 for 循环初始化 C 结构

    我正在创建一个质量中心程序 并试图对其进行概括 它最多仅适用于 3D 使用具有 3D 和质量元素的结构 类型对象的变量数量 我希望由用户而不是我来定义 但我找不到使用循环创建变量的方法 也许有不同的方法可以做到这一点 但我只是不知道 这是我
  • Seam/JSF 表单提交触发按钮 onclick 事件

    我有一个带有查询生成器的搜索表单 构建器通过按钮激活 像这样的东西
  • std::vector 是否满足 Boost.Interprocess 分配器的容器要求?

    In boost interprocess文档称容器存储在共享内存中的要求 STL容器可能不会假设用分配器分配的内存可以用相同类型的其他分配器释放 仅当一个对象分配的内存可以与另一个对象一起释放时 所有分配器对象才必须比较相等 并且只能使用
  • Scala 中如何省略匹配词?

    在Scala中 你可以这样做 list filter item gt item match case Some foo gt foo bar gt 0 但您也可以通过省略来实现更快的方法match list filter case Some
  • Printf 即使它不应该

    我有 if 语句的这一部分 并且得到了奇怪的输出 int x 10 if 1 lt x lt 5 printf F n 为什么它打印 F 从逻辑上讲 if 语句不是假的 因为 x 大于 1 但不小于 5 在 C 语言中 你不能像这样链接比较
  • Twitter Bootstrap Carousel 插件能否在幻灯片过渡时淡入淡出

    我在我正在开发的网站上有一个非常基本的 Twitter Bootstrap Carousel 插件实现 http furnitureroadshow com http furnitureroadshow com 我只是想知道是否有人扩展了轮
  • std::sort 崩溃 - 没有严格弱排序的排序

    我正在尝试对项目向量进行排序 正如代码注释中提到的 顺序应该是 具有更多行动点的参与者 mAp 先走 当出现平局时 具有相同倾向的参与者 mDisposition 作为战斗的发起者 mBattleInitiator 先走 以下代码 简化示例
  • MongoError:'$push'中的美元($)前缀字段'$push'对于存储无效

    我在尝试着upsert数据集到 Mongo 集合 The intended document may or may not exist 如果确实存在 它将在嵌入文档 zip 中至少包含一项 并且应附加到该文档而不是覆盖它 如果不存在 则应将
  • 子类中是否有符合自定义协议的常规空白函数?

    我的应用程序中有两个主屏幕 目前两者都只是UIViewController 这两个视图控制器非常相似 它们都实现了我的自定义子类UIView called HeaderView负责显示信息并接受用户输入 就目前而言 这段代码是重复的 因为H
  • 为什么匿名联合不能包含具有重要构造函数/析构函数的成员?

    我可能是错的 但我发现的基本解释是联合无法初始化 因为它不知道要调用哪个成员的构造函数 编译器无法自动生成联合的构造函数 为什么不允许用户定义 union 构造函数 这将消除上述问题并允许具有重要构造函数 析构函数的工会成员的存在 另外 为
  • 从 iOS 上传多个图像到 S3 的有效方法

    我在应用程序中使用 Amazon S3 作为我的文件存储系统 我的所有项目对象都有多个与之关联的图像 每个图像仅存储图像 URL 以保持数据库的轻量级 因此 我需要一种有效的方法来直接从 iOS 上传多个图像到 S3 并在成功完成后将它们的
  • Drools - 使用累积来查找最小值和最大值

    我有一个流口水的问题 困扰我一段时间了 我想使用累积从 Item 对象列表 包含价格 中找出最低和最高价格 插入一个包含 Item 列表的 Member 对象 包含 Item 对象列表 groovy java source pseudo c
  • WordPress“REST API”-渲染 VisualComposer 内容

    我正在通过 REST API V2 插件从 WordPress 请求内容 这很好用 只剩下一个问题 由 VisualComposer 插件创建的内容不会在 de REST Response 中呈现 回应是 vc row Hello Worl
  • 如何使用vue + axios在get请求中使用async/await?

    我有以下代码 想知道如何使用 async await 执行相同的函数来实现 try catch import Vue from vue import axios from axios new Vue el app data skills m
  • 如何在 Powershell 中使用基于当前日期的名称创建文件夹?

    我有大约 50 个 xml 文件 每次运行特定逻辑时都会新生成这些文件 现在我希望将这 50 个文件存储在特定的日期时间文件夹中 无论我为某个特定日期运行该逻辑多少次 都应该仅针对该特定日期覆盖 xml 文件 基于 hhmmss 简单来说
  • SqlMetal 错误地生成我的存储过程的返回类型 (LINQ)

    您好 有一个存储过程 它总是根据参数返回一行 IF bleh 1 SELECT TOP 1 Xyz FROM Abc ELSE SELECT TOP 1 Def FROM Abc 我必须使用 SqlMetal 生成 DataContext
  • 如何为每个键值选择具有最新时间戳的行?

    我有一张传感器数据表 每行都有一个传感器 ID 时间戳和其他字段 我想为每个传感器选择具有最新时间戳的单行 包括一些其他字段 我认为解决方案是按传感器 id 分组 然后按 max timestamp 排序 如下所示 SELECT senso
  • Android 相当于 iOS MobileSubstrate 风格的挂钩吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 列表理解与映射

    有理由更喜欢使用map https docs python org 3 8 library functions html map过度列表理解还是反之亦然 它们中的任何一个通常比另一个更高效还是被认为更Pythonic map在某些情况下 微
  • C++ 参考——它们只是语法糖吗?

    C 参考只是语法糖 还是在某些情况下提供任何加速 例如 无论如何 指针调用都涉及副本 对于引用调用似乎也是如此 基本机制似乎是相同的 编辑 在大约六个答案和许多评论之后 我仍然认为引用只是语法糖 人们是否可以直接回答 是 或 否 以及是否有