当模板类型是基本类型时通过引用传递的成本

2024-01-02

我一直听说确保最佳性能的良好做法是:

  • 通过基本类型(int, double...) 按价值
  • 通过常量引用传递类

如今,使用 C++11 并在编译器下进行全面优化,当通过 const 引用传递基本类型时是否会产生开销?

而且,当T is int将实现以下功能:

template <typename T> inline void f(const T& x);

慢于:

template <typename T> inline void f(const T x);

如果编译器确实内联代码(这对于简单模板来说很常见),那么就不会有什么区别。当函数无法内联并且调用外联定义时,问题就会变得明显。

在这种情况下,传递引用可能会在访问变量时涉及额外的取消引用(至少是第一次,可能多次)。同时,如果参数是按值传递的,则编译器可以执行更积极的优化,因为它知道该变量无法在当前函数之外访问/修改。

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

当模板类型是基本类型时通过引用传递的成本 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz

随机推荐

  • 使用python从IB api获取外汇汇率

    我正在尝试使用 ibpy 库从交互式经纪商获取货币汇率 我在谷歌上找到了代码 我做了一些更改 from ib ext Contract import Contract from ib opt import ibConnection mess
  • 相对布局 - CenterInParent 和 marginTop

    我有以下 XML
  • 单击按钮后开始倒计时

    我正在创建一个带有计时器倒计时的儿童游戏 该游戏在用户单击按钮后开始 我正在使用的代码可以毫无问题地启动倒计时 但我希望倒计时仅在单击按钮后才开始 这是我的代码 window onload function function var cou
  • 触发 valueChange 与初始化值 - angular2

    我正在编写一个 angular2 应用程序 但我遇到了一些问题 首先 我有一个绑定到的选择formControl export class MyComponent implements OnInit profilesBy Observabl
  • 如何从 Java 运行 UNIX 终端并向其发送命令?

    关于主题 代码如下 Process proc null try String cmdss gnome terminal proc Runtime getRuntime exec cmdss null wd catch IOException
  • 防止iOS接近传感器使屏幕变黑

    我已经看到这个问题被问了几次 但没有人回答它 事实上这可能是不可能的 但我想知道是否有一种方法可以防止 iPhone 上的邻近状态发生变化时屏幕变黑 我已经实现了一种方法 可以在接近状态发生变化时执行某些操作 但屏幕会闪烁为黑色 我想避免这
  • Visual Studio 2013 中的自定义脚手架模板

    以前 使用 Visual Studio 2012 我能够将CodeTemplates文件夹到我的项目目录然后修改现有的T4 templates或者添加全新的 T4 模板来满足我特定的代码生成要求 前面描述的方法似乎不再适用于 Visual
  • numpy apply_along_axis 一维数组

    当 numpy apply along axis 采用一维数组作为输入时会发生什么 当我在一维数组上使用它时 我看到一些奇怪的东西 y array 1 2 3 4 第一次尝试 apply along axis lambda x x gt 2
  • AngularJs - RXJS 可观察取消订阅

    我已经设置了 RXJS 可观察的 我有两个组件订阅服务工厂中的一个主题 如何取消订阅选定组件的主题 以便按下按钮即可停止收听主题广播 看我的jsfiddle取消订阅应用程序 https jsfiddle net bkarv 0maek0qr
  • stdcall 可以有可变参数吗?

    据我所知 只有 caller clean stack 约定可以使用变量参数 顺便说一句 WinApi StringCchPrintfW 是这样声明的 我删除了 SAL 内联 HRESULT stdcall字符串CchPrintfW STRS
  • WidgetKit(意图)-如何链接从远程获取的多个动态意图?

    我正在为我的应用程序创建一个小部件 并使用从 API 获得的动态数据成功添加意图配置 此代码片段获取列表并将其返回到 Intent func provideLeagueOptionsCollection for intent LeagueC
  • 我可以注释“fun”声明的完整类型吗?

    在学习环境中 我可以选择哪些选项来为函数提供类型签名 标准 ML 没有像 Haskell 那样的顶级类型签名 以下是我考虑过的替代方案 模块签名 需要单独的签名文件 或者在与模块本身相同的文件内的单独块中定义的类型签名 这需要使用模块 在任
  • jquery 没有父级的子选择器

    我正在查看创建轮播菜单的教程中的一些代码 并注意到没有父项的父子选择器 以前从未见过这个 并且对它实际在做什么感到困惑 参见下面的代码 var wrapper gt div this css overflow hidden slider w
  • 生成最近两周的日期范围?

    我想生成 2 个 DATETIME 代表从星期日到星期六 2x 的最近两周 它不应该包括当前不完整的一周 感谢你的帮助 一些可以工作的东西 利用美妙的DateTime课程
  • Flutter上如何用pop获取返回值?

    我想知道如何在 Flutter 上使用 pop 获取两个值 我尝试编写代码 但我得到了异常 必须向文本小部件提供非空字符串 这是代码 第一屏 ElevatedButton child const Text move to second sc
  • Powershell 将数据传输到外部控制台应用程序

    我有一个可以接受标准输入的控制台应用程序 它缓冲数据直到执行命令 此时它会执行所有数据 并将输出发送到标准输出 目前 我正在从 Powershell 运行该应用程序 将命令通过管道传输到其中 然后解析输出 传入的数据相对较小 然而 该应用程
  • MySQL 中嵌套循环中的多个游标

    我想做一些在 MySQL 中显得有点复杂的事情 事实上 我希望打开一个游标 执行一个循环 并在这个循环中 使用上一个要执行的提取中的数据打开第二个游标 并重新循环结果 DECLARE idind INT DECLARE idcrit INT
  • 如何确定 Signal R 正在使用哪种传输方法

    我正在使用 signal r 服务器和 Web 客户端编写一个测试应用程序 我想知道是否有办法确定或让服务器知道客户端正在与服务器建立哪种传输方法 对于在客户端和服务器之间具有持久双向连接的 websockets 或持续轮询服务器直到服务器
  • 创建具有过滤范围的单元格内下拉列表

    我正在使用谷歌电子表格 为了说明我的问题 我使用范围A2 A8用于数据验证D2 and E2 但因为在细胞内D2 你应该只选择一种动物 我想用以下内容过滤范围B2 B8 我尝试过的是使用我自己的公式 FILTER A2 A8 IS B2 B
  • 当模板类型是基本类型时通过引用传递的成本

    我一直听说确保最佳性能的良好做法是 通过基本类型 int double 按价值 通过常量引用传递类 如今 使用 C 11 并在编译器下进行全面优化 当通过 const 引用传递基本类型时是否会产生开销 而且 当T is int将实现以下功能