什么时候适合使用引用变量?为什么?您能解释一下实际的语法和位置吗? [复制]

2024-01-19

我是 C++ 的新手。我们最近开始在课堂上探索参考变量,我对它们感到非常困惑。不一定是如何做它们,因为我知道它们会切换变量值,但更多的是沿着为什么开发人员想要做这样的事情?他们完成了什么?它们节省内存吗?他们是否避免返回信息?

这是我们正在进行的项目的一部分。我们需要至少包含一个引用变量。我可以看到如何在没有引用变量的情况下编写程序,但我不知道引用变量在哪里有用或必要。

“用户可能希望获得一对多房间的估价。费率基于墙壁和/或天花板的平方英尺。该公司估计,粉刷 200 平方英尺的墙壁空间需要 2.5 小时,粉刷 200 平方英尺的墙壁空间需要 3.2 小时。在天花板上粉刷相同的区域。人工费率为每小时 40 美元。如果粉刷墙壁的工作总面积超过 1400 平方英尺,那么对于 1400 平方英尺以上的所有平方英尺,客户将获得 15% 的折扣。没有油漆天花板折扣。

该计划应以专业格式打印预计成本的最终报告。

程序将在退出之前询问用户是否要进行更多计算。”

我不是找你们给我做作业,作为参考,我们刚刚完成了学习功能。我很好,但是通过这些网站阅读的东西有很多我不明白。

而且,本质上,studentID 将设置为 21654。我理解正确吗?

让我们再试一次:

我已经审查了这个建议的重复。虽然它确实涵盖了使用引用变量而不是指针的优点/缺点的基础知识,并讨论了使用这两种变量的多种原因,但我仍然质疑何时(何时合适与不必要)和为什么(为什么)的基本思想在某些情况下是合适的,它给程序带来了什么优势?)

我应该使用这些变量以及如何使用(实际的语法和位置)。这里几乎每个人都很棒,通过与你们的互动,我在这个主题上学到了很多东西。尽管其中大部分内容对经验丰富的程序员来说都是重复且令人恼火的,但对我来说却是全新的,我需要参与对话,就像我需要信息一样。我在许多项目中使用过 Stack Overflow,例如学习 Java 的 newString.equalsIgnoreCase(),我很钦佩您的知识。我只能告诉你真相,如果这还不够好,那就是这样了。

好吧,让我回顾一下我目前的理解:

引用变量往往会减少函数和/或程序中不需要的变量修改。

引用变量用于修改函数内现有的变量

这非常有用,因为它可以“移动”值,同时最大限度地减少这些值的复制。

引用变量修改函数/程序中的现有变量

我不知道你们是否还能阅读这篇文章,因为它已被标记为重复。我一直在玩你们给我的一些小程序,重新阅读了我的书的部分内容,做了进一步的研究,等等,我think我的理解是初级的。这些引用变量允许您更改和/或使用代码中的其他变量,而无需将它们直接拉入代码中。我不记得哪个用户正在使用 foo(hubble, bubble) 示例,但最终是他/她的代码让它点击了。您实际上是在使用和/或重新分配变量,而不是仅仅使用该值。


引用变量只不过是变量的别名。当您只想传递值而不是将相同的变量复制到内存中的不同位置时,可以使用它。因此,使用引用可以避免复制,从而节省内存。

根据比亚尼·斯特鲁斯特鲁普常见问题及解答 http://www.stroustrup.com/bs_faq2.html#pointers-and-references:

C++ 继承了 C 的指针,所以我无法在不删除它们的情况下删除它们 造成严重的兼容性问题。参考资料对于 有几件事,但我在 C++ 中引入它们的直接原因是 支持运算符重载。例如:

void f1(const complex* x, const complex* y)    // without references
    {
        complex z = *x+*y;    // ugly
        // ...
    }

    void f2(const complex& x, const complex& y)    // with references
    {
        complex z = x+y;    // better
        // ...
    }

更一般地说,如果您想同时拥有指针的功能 和参考的功能,您需要两个不同的 类型(如 C++ 中)或单个操作上的两组不同的操作 类型。例如,对于单一类型,您需要两个操作来 分配给所引用的对象以及分配给 参考/指针。这可以使用单独的运算符来完成(如 模拟)。例如:

Ref<My_type> r :- new My_type;
r := 7;            // assign to object
r :- new My_type;    // assign to reference

或者,您可以依赖类型检查(重载)。为了 例子:

Ref<My_type> r = new My_type;
r = 7;            // assign to object
r = new My_type;    // assign to reference

另外,请阅读这个堆栈溢出问题 https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in关于指针变量和引用变量之间的区别。

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

什么时候适合使用引用变量?为什么?您能解释一下实际的语法和位置吗? [复制] 的相关文章

随机推荐

  • 更改媒体查询中的视口

    我目前正在研究响应式网页设计 智能手机视图 尚未准备好 因为我的客户必须获得更多预算 因此 我需要实现一个临时视图 我想通过仅在智能手机上激活的固定视口来实现 我以这种方式设置视口 如果触发以下媒体查询 我想将设备宽度更改为 700 像素
  • 无法在 M1 Mac 上的 docker 容器中加载 nokogiri

    我正在 M1 mac 上构建一个 Linux docker 镜像 如果有的话 可以从 ruby 3 0 2 alpine3 12 开始 当我尝试在容器中执行捆绑执行时 ruby 抱怨它无法加载 nokogiri 如果我只是启动 ruby 并
  • 在 Docker 中运行 Azure DevOps 作业时出现“无法找到给定版本的模块 Az.Accounts”错误

    我在基于 ubuntu 16 04 的容器中安装 PowerShell 和 Az 模块 RUN curl https packages microsoft com keys microsoft asc apt key add wget ht
  • Git - 什么是“Refspec”

    我一直在关注本指南 https medium com teeks99 continuous integration with jenkins and gitlab fa770c62e88a关于配置 GitLab 与 Jenkins 的持续集
  • 在 django 迁移期间处理数据?

    class Material models Model name models CharField max length 50 blank False short name models CharField max length 2 bla
  • C++ lambda 表达式的生命周期是多长?

    我读过了C 中 lambda 派生的隐式函子的生命周期是多少 https stackoverflow com questions 5207467 what is lifetime of lambda derived implicit fun
  • 在运行时从自定义 UITypeEditor 内部将自定义 TypeConverter 插入到属性上

    我创建了一个自定义 UITypeEditor 我是否可以插入一个属性 该属性也将 TypeConverter 附加到我的属性insideUITypeEditor 类 我已经尝试过以下操作 但无论我如何扭转和转动它 都没有任何反应 Attri
  • conda“源停用”产生错误:参数太多

    我正在尝试通过以下方式测试创建虚拟环境conda create这是我第一次真正涉足虚拟环境 所以我仍在思考如何使用它们 我的第一个测试是 conda create p users me anaconda envs envtest sourc
  • Lodash中的transform和reduce有什么区别

    除了声明 转换是减少的更强大的替代方案 之外 我找不到任何有关差异的文档 lodash中的transform和reduce有什么区别 除了慢 25 http jsperf com transform vs reduce 我喜欢在引入实用程序
  • 强制保存所有浏览器中的文件 - 不在浏览器窗口中打开

    我正在寻找一个适用于所有浏览器的简单解决方案 对于特定文件类型或通过类的目标链接 如何让它们在所有主要浏览器中简单地强制下载 我想我找到了 apache 服务器的完美解决方案 通过将其添加到 htaccess 中 http css tric
  • Python 加载 UTF-8 JSON

    我有以下 JSON 为简单起见 我只使用一个 但实际上有 100 个条目 Active false Book US Derivat London Mike bersax Michael Jealous ExpirationDate 2006
  • 从 Eclipse 工作区 .metadata 签入什么内容

    我一直在对工作区下的项目进行版本控制 但我从未想过应该检查工作区配置本身 到目前为止 我知道我对永远的浮肿完全没有兴趣 log文件 所以我绝对不会签入它 但是 我可以丢弃其他其他子目录或文件吗 应该 lock 尺寸0 被检查了吗 关于 pl
  • 如何使用dockerfile在容器运行时运行.sh文件

    我正在制作一个 dockerfile 来安装 elasticsearch 6 5 4 并向所需位置添加一些文件 并运行名为 test sh 的脚本以在 elasticsearch 运行时在 elasticsearch 中创建新索引 我不确定
  • 如何调试此错误:CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER?

    我的应用程序中出现错误 我不知道如何解决 以前有人见过这个错误 Binary Image Name Address Symbol 0 RepZio 0x002bd302 testflight backtrace 1 RepZio 0x002
  • C# using 语句位于代码页顶部

    几乎所有 C 文件都有using页面顶部的声明 i e using System using System IO code 做什么的using声明意味着位于页面顶部 为什么语法与其他的不同using声明声明 i e using Resour
  • 如何使用硒滚动页面

    我正在使用 FirefoxDriver 网络驱动程序 Firefox 窗口中加载的页面是一个大页面 我想使用 selenium 滚动该页面 我想知道如何做到这一点 如果你想使用selenium webdriver在firefox窗口上滚动
  • 强制QWebView在单独的线程中下载网页内容?

    我如何强制 QWebView 在单独的线程中下载网页和相关内容 你不能轻易 您可以实现自己的 QNetworkAccessManager 请参阅 createRequest 将工作卸载到另一个线程中的 QNetworkAccessManag
  • Angular 6 + Popper.js(无 jQuery)

    我正在尝试设置 Popper js 以使用 Angular 5 无需 bootstrap 或 jquery 我尝试按照这个https github com FezVrasta popper js react vuejs angular an
  • Xcode 4 Cmd+alt+上/下重新映射

    我意识到头文件和实现文件之间的切换已移至 ctrl cmd up down 然而 这非常烦人 因为在我可以用一只手的 3 个手指快速完成之前 箭头键附近没有 Ctrl 按钮 所以我打开首选项发现我可以更改键绑定并尝试按 cmd alt 上
  • 什么时候适合使用引用变量?为什么?您能解释一下实际的语法和位置吗? [复制]

    这个问题在这里已经有答案了 我是 C 的新手 我们最近开始在课堂上探索参考变量 我对它们感到非常困惑 不一定是如何做它们 因为我知道它们会切换变量值 但更多的是沿着为什么开发人员想要做这样的事情 他们完成了什么 它们节省内存吗 他们是否避免