C++ 中通过常量引用将指针传递给对象

2024-02-19

我正在为大学做一项实际作业,但遇到了一个问题。 我有一个声明此方法的类:

bool graficarTablero(const Tablero *&tablero, const string &nombreArchivo);

我想通过常量引用传递指向对象 Tablero 的指针。 如果我调用该函数,例如:

ArchivoGrafico *grafico = new ArchivoGrafico;
if(grafico->graficarTablero(tablero, ARCHIVO_GRAFICO)){ ...

...我收到编译错误。好的,我不会详细说明我遇到的错误,因为我认为我已经找到了解决方案,方法是将方法头替换为:

bool graficarTablero(Tablero* const& tablero, const string &nombreArchivo);

现在似乎可以工作(至少现在可以编译),但我想知道为什么第一个声明不起作用而第二个声明起作用。好吧,更重要的是我真正想知道它们是否实际上意味着相同的事情(通过常量引用指向对象的指针)。

嗯,谢谢你的回答。


编辑1: 我想做的是避免按值传递。 好吧,我知道这并不是一个真正昂贵的操作,但是真的没有办法使用相同的指针并保证它不会以任何方式修改吗?

Thanks.


编辑2: 抱歉,我没有仔细阅读杰里·科芬的回答。 是的,这就是我一直在寻找的。这并不是说我真的必须这样做,但有一天我可能会发现这个小小的优化很有用。


从右到左阅读声明,使用“reference to”&和“指向”的指针*.

  1. const Tablero *&tablero=> tablero 是对指向 const Tablero 的指针的引用
  2. Tablero* const& tablero=> tablero 是对 Tablero 的 const 指针的引用

我很难弄清楚后者有用的情况——如果你要传递一个 const 引用,你也可能只传递指针本身的副本。 const 引用通常主要用作按值传递的替代方法,但避免复制该值,因此它主要在您的值很大时有用(例如,一个很大的值)std::vector或该订单上的某些内容)。对于指针,您也可以按值传递它(因为复制指针通常非常便宜)。通常,如果您通过引用传递指针,则可以修改该指针 - 但在这种情况下const防止这种情况发生。

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

C++ 中通过常量引用将指针传递给对象 的相关文章

随机推荐

  • 降低滑动视图中的灵敏度

    在 Xamarin 中 我将 SwipeView 作为 CollectionView 中的 ItemTemplate
  • 最适合 Web 开发的 Linux 发行版? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 案例类的复制方法是否使用结构共享?

    Scala 不可变集合中的结构共享非常简单 并且有很多材料可以理解它 现在每个 Scalacase class自动定义一个copy方法 它返回指定新属性的新副本 我的问题是 该方法是否使用结构共享 所以当我有一个 case class A
  • Xcode xcconfig:根据目标配置依赖项

    寻求解决 Objective C名称空间 https stackoverflow com questions 1474626 objective c function dispatch collisions or how to achiev
  • Raspberry Pi 3 上通用时钟框架驱动程序的 Hello World

    我正在尝试为通过 I2C 连接到 Raspberry PI 3 的时钟编写一个通用时钟框架驱动程序 注意 我对 Linux 和内核编程都很陌生 更新 成功 下面的代码适用于 Hello World 驱动程序 为了加载驱动程序 我必须对设备树
  • TYPO3 v8.7 JQuery 包含在内吗?

    我将 TYPO3 版本从 6 2 31 更新到 8 7 19 现在 JS JQuery 出现了一些问题 我听说 JQuery 自动包含在新的 TYPO3 版本中 是对的吗 提前致谢 你需要更具体地回答这个问题 是的 v8 提供了 jquer
  • Go 包是否应该使用 log.Fatal 以及何时使用?

    到目前为止我已经避免使用log Fatal 但我最近偶然发现了这些问题 代码覆盖率 https stackoverflow com questions 33873305 how to get 100 code coverage in gol
  • Sql Azure - 单独的服务器?

    首先我要说的是 我既不是数据库专家 也不是 Azure 专家 看来 MS 按 Sql Azure 数据库的大小和数量收费 而不是按服务器数量收费 因此 从成本角度来看 在每个服务器实例上放置一个数据库似乎是可行的 我的理解是 有时将数据库放
  • Javascript:文件构造函数的参数 1 无法转换为序列

    我正在尝试更改 a 的文件名File通过 JavaScript 对象
  • 如何用curl和php欺骗referrer? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个简单的完整 php curl 代码来欺骗引荐来源网址 我尝试了其他一些但不起作用 我检查的最后一个是这个 function
  • 如何禁用屏幕固定中生成的 Toast 消息?

    我正在开发锁屏应用程序 我想禁用主页按钮 我的应用程序是 设备所有者和设备管理员 现在我正在使用屏幕固定来禁用主页按钮 但是 如果我每次收到消息 屏幕已固定 并关闭 屏幕已取消固定 时就开始活动 并且如果单击主页 则 您的组织不允许取消固定
  • 关于c#中的静态类[重复]

    这个问题在这里已经有答案了 可能的重复 何时在 C 中使用静态类 https stackoverflow com questions 241339 when to use static classes in c 为什么有人会编写静态类 我们
  • 记忆化Python函数

    这是一小段代码 它将每个函数转换为其记忆版本 def memoize f Memoize a given function f def memf x if x not in memf cache memf cache x f x retur
  • 我可以通过编程方式将外部 exe 标记为“安全运行(未知发布者)”吗?

    所以我有自己的应用程序 main exe 在某些安全级别较高的计算机中 由于 未知发布者 它会显示警告 我试图 绕过 它 现在我知道了right方法是对程序集进行签名 购买证书并成为已知的发布者 然后它就不会显示此警告 但证书并不便宜 我的
  • 在没有 Google Apps 的情况下通过 Google Play 商店在私人渠道中部署应用程序?

    我正在构建一个 Android 应用程序 出于各种原因不能公开上市在 Google Play 商店中 我找到了有关的信息Google Play 私人频道 https support google com a answer 2494992 h
  • 在 xPages 中使用数据上下文有什么好处?

    我从未在 xPages 中使用过数据上下文 想了解其好处 如果我想返回内存中的某些内容 我经常调用 SSJS 脚本库中的函数 我相信该脚本库也存储在内存中 假设我在 ssjs 中有一个返回 Notesdocument 的函数 这个函数可能会
  • PHP 架构以及按引用传递与按值传递

    寻求PHP架构师的建议 我对 PHP 不是很熟悉 但已经接管了用该语言编写的大型分析包的维护工作 该架构旨在将报告数据读取到大型键 值数组中 这些数组通过各种解析模块传递以提取每个模块已知的报告参数 已知的参数将从主阵列中删除 并且任何模块
  • Rails paths.rb 语法

    我搜索了又搜索 但找不到详细说明 Rails 3 中的routes rb 语法的页面 有指南 概述 甚至高级示例 但为什么没有一个页面详细说明每个关键字的确切语法 这一页 http www engineyard com blog 2010
  • 在 C# 中引发事件的单元测试(按顺序)

    我有一些代码会引发PropertyChanged事件 我希望能够对事件是否正确引发进行单元测试 引发事件的代码就像 public class MyClass INotifyPropertyChanged public event Prope
  • C++ 中通过常量引用将指针传递给对象

    我正在为大学做一项实际作业 但遇到了一个问题 我有一个声明此方法的类 bool graficarTablero const Tablero tablero const string nombreArchivo 我想通过常量引用传递指向对象