当前位置: 首页 > 知识库问答 >
问题:

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

轩辕经赋
2023-03-14

我一直听说确保最佳性能的最佳实践是:

  • 按值传递基本类型(intdouble..)
  • 通过常量引用传递类

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

此外,当<code>T<code>为<code>int<code>时,将执行以下功能:

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

慢于:

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

共有1个答案

华永新
2023-03-14

如果编译器真的内联了代码(这对于简单模板很常见),那么就没有什么区别了。当函数不能内联并且调用了行外定义时,问题变得明显。

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

 类似资料:
  • 我有这样的代码 现在,为了打印值,如果T是一个类,我想调用对象的打印函数,但是如果T是一个基本数据类型,我只想使用printf。 那么,如何确定模板类型是基本数据类型还是类?

  • 本文向大家介绍String类型传递是值传递,char[]类型传递是引用传递的实现,包括了String类型传递是值传递,char[]类型传递是引用传递的实现的使用技巧和注意事项,需要的朋友参考一下 如下所示: 结果是:str任然是hello,ch的第一个元素a变为c 以上就是小编为大家带来的String类型传递是值传递,char[]类型传递是引用传递的实现的全部内容了,希望对大家有所帮助,多多支持呐

  • 问题内容: 我正在为核心数据编写通用包装类。 这是我的一些基本类型。没什么特别的。 我已经将我的coredata写在协议中抽象化了。如果您让我知道您对我要提出的抽象的意见,我将不胜感激。但是在扩展中,我遇到了以下错误: 无法将类型“ NSFetchRequest”的值转换为预期的参数类型“ NSFetchRequest <_>” 不确定我该如何解决。我尝试了各种更改代码的尝试,但未成功…… 另外,

  • ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。第3 章讨论了5 种基本数据类型:Undefined、Null、Boolean、Number 和String。这5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的

  • 本文向大家介绍JavaScript引用类型和基本类型详解,包括了JavaScript引用类型和基本类型详解的使用技巧和注意事项,需要的朋友参考一下 在javascript中存在着两种类型的数据:基本类型和引用类型。 基本类型简单的说就是简单的数据段。 引用类型是由多个值构成的对象。 当我们进行赋值操作时,解析器会首先分析数据是值类型还是引用类型。 两种访问方式: 基本类型值:按值访问,操作的是他们

  • 本文向大家介绍浅析JavaScript基本类型与引用类型,包括了浅析JavaScript基本类型与引用类型的使用技巧和注意事项,需要的朋友参考一下 对于 JavaScript 类型,可以简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言;有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内存中保存了一个指向实现位置的指针。 市面上很多书