类中函数原型中的运算符 & 和 *

2023-11-29

我在这样的课程中遇到问题:

class Sprite {
    ...
        bool checkCollision(Sprite &spr);
    ...
};

所以,如果我有这门课,我可以这样做:

ball.checkCollision(bar1);

但如果我将课程更改为:

class Sprite {
    ...
        bool checkCollision(Sprite* spr);
    ...
};

我必须这样做:

ball.checkCollision(&bar1);

那么,有什么区别呢??这是更好的方法而不是其他方法?

谢谢。


在这两种情况下,您实际上传递的是bar1(并且您没有复制该值),因为指针(Sprite *)和引用(Sprite &)都具有引用语义,在第一种情况下显式(您必须显式取消引用指针来操作指向的对象,并且您有显式地将对象的地址传递给指针参数),在第二种情况下是隐式的(当您操作引用时,它是as if您正在操作对象本身,因此它们具有值语法,并且调用者的代码不会使用 & 运算符显式传递指针)。

因此,指针和引用之间的最大区别在于您可以对指针/引用变量执行什么操作:指针变量本身可以修改,因此它们可以更改为指向其他内容,可以为 NULL、递增、递减等,因此,指针上的活动(您可以直接使用变量名访问)和它指向的对象上的活动(您可以使用 * 运算符访问 - 或者,如果您想访问成员,可以使用-> 快捷方式)。

相反,引用的目的只是成为它们指向的对象的别名,并且不允许更改引用本身:您使用它们引用的对象初始化它们,然后它们的行为就好像它们是整个对象一样生活。

一般来说,在 C++ 中,引用优于指针,出于我所说的动机以及您可以在适当的部分C++ 常见问题解答。

就性能而言,它们应该是相同的,因为引用实际上是变相的指针;尽管如此,可能存在一些极端情况,当代码使用引用而不是指针时,编译器可能会进行更多优化,因为保证引用不会更改它们隐藏的地址(即,从它们生命周期的开始到结束)总是指向同一个对象),所以在一些奇怪的情况下你may使用引用可以提高性能,但是,再次强调,使用引用的重点在于良好的编程风格和可读性,而不是性能。

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

类中函数原型中的运算符 & 和 * 的相关文章

  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 格式说明符%02x

    我有一个简单的程序 include
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • 条件类型定义

    如果我有一小段这样的代码 template
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • 查找表中每行的顶级父级 [SQL Server 2008]

    我有以下两张表 表人 Id Name 1 A 2 B 3 C 4 D 5 E 表关系层次结构 ParentId CHildId 2 1 3 2 4 3 这将形成一个树状结构 D C B A ParentId 和 ChildId 是 Pers
  • 有没有一种方便的方法可以在 Swing JTable 中使用微调器作为编辑器?

    我处理的数字数据通常会向上或向下编辑 0 01 Value of variable 因此与通常的文本单元格相比 微调器看起来是一个不错的选择 我看过 DefaultCellEditor 但它只接受文本字段 组合框或复选框 有没有方便的方法来
  • 两个已知的 Android 地理位置之间的角度

    我想找到两个已知地理位置之间的角度 基本上我想要的是 我想引导一个箭头 其尾点位于我当前的位置 箭头指向固定的地理位置 所以我在想 如果以某种方式 我能够在这两个地理位置之间获得一个角度 那么我可能也能做同样的事情 你们有什么建议可以更好地
  • Python 和 sqlite3 抛出错误:sqlite3.OperationalError:靠近“s”:语法错误

    我正在尝试使用 Python 和 BeautifulSoup 来抓取一些网络信息 迭代它 然后将一些片段插入 sqlite3 数据库中 但我不断出现这个错误 TBTscrape 中的文件 Users Chris Desktop BS4 TB
  • Azure:跨多个资源组共享资源

    是否可以在多个资源组之间共享特定资源 在我的例子中是 redis 缓存 资源组只是逻辑容器 资源位于哪个资源组中并不重要 您可以使用任何资源组中的资源 Example 假设您在 RG1 中创建应用服务计划 并在 RG2 中创建 Web 应用
  • Swift 3 中是否可以在不自动布局的情况下降低键盘的高度?

    我需要以编程方式降低键盘的高度 我有什么办法可以做到吗 我发现我们可以使用键盘扩展来降低高度 但我尝试过 但它对我不起作用 我有什么办法可以做到这一点吗 Edit But i can see small keyboards in some
  • 如何替换字符串的某些部分?

    如何用另一部分替换字符串的某一部分 输入字符串 Hello my name is Santa 我怎样才能改变一切a在我的字符串中还有其他东西吗 我想我需要一个foreach循环 但我不确定如何使用它 strtr str array a gt
  • java下载文件时如何检测网络断开?

    我正在使用以下代码使用 Java 下载文件 但我想检测连接何时丢失 我运行了以下代码 在下载过程中我故意断开了互联网连接 但没有引发异常并且挂起 即使打开连接后也没有任何反应 于是 它就永远挂了 没有任何例外 有没有办法让它在连接丢失时抛出
  • 我可以仅在底部椭圆化剪贴蒙版吗?

    我正在尝试在 CSS 中的图像上创建弯曲的剪贴蒙版 该曲线本质上只是一个非常宽的椭圆的下半部分 要求是角度 曲率不会根据图像的高度 宽度而改变 它应该始终保持一致 这是一个视觉效果 尝试1 边框半径 溢出隐藏 固定宽度 问题 图像高度影响曲
  • 为什么“cut”反对我的标签?

    我试图根据值所属的范围来标记值 就像你对作业评分一样 因此 如果我有一个平均测验分数的数据框和一个数值数据框 我将其用作为这些平均值分配分数的下限 grades lt read table text Student Mean Adam 94
  • 私人运营商删除[重复]

    这个问题在这里已经有答案了 可能的重复 公共运算符 new 私有运算符删除 使用 new 时出现 C2248 无法访问私有成员 http efesx com 2009 12 01 public operator new and privat
  • jQuery addClass 方法链接以执行 CSS 转换

    我想做的事 broke div div
  • 通过java App查看PDF

    我想知道如何通过 Java 应用程序查看 PDF 我正在尝试创建一个应用程序来使用 NetBeans 6 8 查看 PDF 很少有 pdf 阅读器库 例如 iText pdfBox 但他们没有帮助我 请帮我 任何帮助都是感激的 谢谢你 这里
  • Spring集成:使用oubound网关处理http错误

    如何处理 http 出站网关中的异常 当我收到状态代码 500 或 400 时 会显示异常 那么我应该如何使用 spring 集成来处理 http 错误 我的配置是这样的
  • 将 JSON 从 ajax 发布到 Struts2 Action

    嘿 我正在尝试将 JSON 从 Ajax 发布到 Struts2 操作类方法 更多信息 我在 WAMP 服务器上运行客户端 在 Eclipse Tomcat 上运行 Struts2 我的客户端代码
  • Vue.js项目中添加Tailwind.css后,某些类没有效果

    我正在尝试将 Tailwind css 添加到 Vue js 项目中 有很多关于如何执行此操作的资源 其中大多数都遵循与这个视频 为了确保我处于与视频中相同的条件 我从头开始创建了一个 Vue 应用程序 使用vue cli使用默认预设 完成
  • 使用脚本在 Powershell 命令提示符中填写多个答案

    我正在尝试使用 Powershell 脚本自动填写提示的答案 提示问题如下所示 这些问题由 cmd 文件一个接一个地生成 这意味着输入不会返回到 Powershell 输入 我找到了很多答案来一次回答一个问题或多个是 否问题 但还没有这样的
  • .NET WebAPI集中授权

    在 NET WebAPI 中 我创建了一种将所有授权规则放在一个中央位置的方法 而不是分散在各个控制器中 我很好奇为什么这种集中化没有更频繁地进行 是否有影响 安全问题 我当前的方法是在 App Start 期间创建一个字典 其中包含我的所
  • 如何在我的应用程序中使用密码锁定场景?

    实际上 我构建了一个包含本地身份验证的应用程序 到目前为止我的代码 func authenticateUser let authenticationContext LAContext var error NSError let reason
  • 类中函数原型中的运算符 & 和 *

    我在这样的课程中遇到问题 class Sprite bool checkCollision Sprite spr 所以 如果我有这门课 我可以这样做 ball checkCollision bar1 但如果我将课程更改为 class Spr