将整数作为常量引用传递与复制

2023-12-14

这可能是一个愚蠢的问题,但我注意到在大量 API 中,许多采用不打算修改的整数参数的方法签名如下所示:

void method(int x);

而不是:

void method(const int &x);

对我来说,这两个似乎都会function一模一样。 (编辑:显然在某些情况下不是,请参阅 R Samuel Klatchko 的回答)在前者中,值被复制,因此无法更改原始值。在后者中,传递了一个常量引用,因此原始引用无法更改。

我想知道的是为什么一个比另一个更好 - 是因为性能与前者基本相同甚至更好吗?例如传递 16 位值或 32 位值而不是 32 位或 64 位地址?这是我能想到的唯一合乎逻辑的原因,我只是想知道这是否正确,如果不正确,为什么以及何时应该选择int x over const int &x反之亦然。


这不仅仅是传递指针的成本(这本质上就是引用),而且还包括在被调用方法的主体中取消引用以检索底层值。

这就是为什么通过int按值实际上保证会更快(此外,编译器可以优化并简单地传递int通过处理器寄存器,无需将其推入堆栈)。

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

将整数作为常量引用传递与复制 的相关文章

  • 检查空参数的最佳方法(保护子句)

    例如 您通常不希望构造函数中的参数为空 因此看到类似的内容是很正常的 if someArg null throw new ArgumentNullException nameof someArg if otherArg null throw
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源

随机推荐

  • Rails 3 + Daemons gem:查询模型时出现异常

    作为我的 Rails 项目的一部分 我们将使用守护进程作为消息队列侦听器来执行来自 Rails RESTful Web 服务前端的命令 为了便于原型设计 我们使用 Daemons gem 创建一个非常简单的守护进程 现在 这非常简单 这是代
  • 如何判断一个多边形是否在另一个多边形内部?

    我有一个简单的例子 SVG源 看起来像你可以在下面看到的 这path带有 ID rect2816 中描述的d属性 m 140 53571 188 625 0 148 1875 273 9375 0 0 148 1875 273 9375 0
  • ReactJS如何更新状态

    constructor super this state address street null city null postalCode null postalCodeChange e this setState address post
  • 如果没有进行替换,Python 字符串将在文件中替换,而不触及文件

    如果没有进行字符串替换 Python 的 string replace 返回什么 即使没有进行任何更改 Python 的 file open f w 是否始终会触及文件 使用 Python 我尝试将一组文件中出现的 oldtext 替换为
  • 检测 matplotlib 刻度标签何时重叠

    我有一个由 pandas 生成的 matplotlib 条形图 如下所示 index Label 1 Label 2 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet consect
  • 在图像完全加载之前使用 Javascript 获取图像尺寸

    我读过有关图像完全加载后获取图像尺寸的各种方法 但是一旦开始加载就可以获取任何图像的尺寸吗 我还没有通过搜索找到太多相关信息 这让我相信这是不可能的 但事实是浏览器 在我的例子中是 Firefox 显示了我在标题中的新选项卡中打开的任何图像
  • 通过 docker-compose 运行时,Flask CLI 抛出“OSError: [Errno 8] Exec format error”

    我正在运行一个 Flask 应用程序自定义脚本 无论如何 或者尝试这样做 我使用的是 Windows 10 应用程序应该使用以下命令在 Linux Docker 容器中运行 docker compose up api Docker comp
  • WebForms 自定义/动态路由

    我在用着菲尔 哈克的WebForms 的 URL 路由 我想定义一个 动态 的路由 假设我有这条路线 any aspx 转到 gt PageProcessor aspx 这会将任何非物理页面的请求发送到 PageProcessor 页面 这
  • 如何在Matlab中使用for循环处理大视频并且没有内存错误

    我是 Matlab 处理的新手 我想在 for 循环 或没有它 中读取和处理一个大视频 超过 200k 帧 我特别想 使用VideoReader阅读视频 将视频细分为 n 个纪元 每个纪元 1000 帧 处理 1000 帧的每个 epoch
  • Git - 在线存储库中有未跟踪的文件[重复]

    这个问题在这里已经有答案了 我正在使用 git bitbucket 来控制我的 Linux 配置文件 所有文件都在目录中 cfg 然后我另外还有一些本地配置文件 cfg local 这些应该因机器而异 我想在我的在线存储库中保留本地文件的副
  • Java - for循环终止表达式之间的区别

    我只是好奇 这两个循环实现之间的速度和性能是否有差异 假使 假设size 方法返回处理一组元素的数组 集合或对象的长度 实际上它来自XOM api 实施1 int size someArray size for int i 0 i lt s
  • 如何在 OPENROWSET(BULK...) 中动态指定文件的路径?

    我想将图像插入图像字段 最好使用接受图像路径的存储过程 经过一番折腾后我想出了这个 functional DECLARE parameters nvarchar max DECLARE sql string nvarchar max N U
  • 如何从 ILNumerics 曲面图上鼠标的单击位置找到曲面的 3D 坐标?

    目前 我们的系统使用 ILNumerics 3D 绘图立方体类和 ILNumerics 曲面组件来显示 3D 网格曲面 我们系统的目标是能够通过鼠标单击绘图来询问表面上的各个点 我们在绘图上设置了 MouseClick 事件 问题是我不确定
  • 如何从 R 中的 nls 获取绘图?

    在 R 中 我使用 nls 进行非线性最小二乘拟合 那么如何使用拟合提供的系数值绘制模型函数呢 是的 这是一个very来自 R 相关新手的天真问题 使用第一个例子 nls按照我逐行指出的示例 可以实现以下目标 This is just ou
  • 在 Objective-C 中检查空字符串的正确方法是什么?

    我在我的 iPhone 应用程序中使用了这个 if title nil do something 但它引发了一些异常 并且控制台显示标题为 null 所以我现在用这个 if title nil title isKindOfClass NSN
  • 如何在 Pandas 数据框中展开列

    我有以下熊猫数据框 import pandas as pd import numpy as np df pd DataFrame fc 100 100 112 1 3 14 125 sample id S1 S1 S1 S2 S2 S2 g
  • VC++ 增量链接器错误 LNK1000

    免责声明 我是一名 C 人员 几乎没有 VS C MFC 经验 我正在尝试在我的机器上构建一些混合 C Net 的项目 当在我的机器上通过命令行编译 C 项目时 我收到此错误 链接 致命错误 LNK1000 IMAGE BuildImage
  • 等待谷歌服务器端函数解析的最简单方法

    我需要客户端代码等待被调用的服务器端 google script run 函数完成 然后再运行更多代码 The withSuccessHandler successFunc 不会导致服务器调用之后的代码行等待 我做了什么 async fun
  • JavaBeans 属性适配器如何工作?

    如果我遵循所描述的 JavaFX 属性定义 我想要做的事情就很好here 现在 我想使用 Java Beans 属性适配器来定义 Java Beans 对象的属性 由于没有文档 我无法弄清楚它是如何工作的 假设我有一个简单的 POJO 类
  • 将整数作为常量引用传递与复制

    这可能是一个愚蠢的问题 但我注意到在大量 API 中 许多采用不打算修改的整数参数的方法签名如下所示 void method int x 而不是 void method const int x 对我来说 这两个似乎都会function一模一