gpt4 book ai didi

c++ - 从编译器的角度来看,传递 const 值或 const ref 之间的区别

转载 作者:行者123 更新时间:2023-11-28 02:42:37 25 4
gpt4 key购买 nike

在 C++ 的上下文中。

我想知道这之间有什么区别:

T f(T const val);

还有这个:

T f(T const & val);

我知道一个是按值传递,但是,从编译器的角度来看,这是一个不会改变的值,所以我的问题是:

  1. 传递const值参数的情况下,编译器是否还需要复制一份?
  2. 哪个更适合编译器的优化器,为什么?

最佳答案

示例 1:

T f(T const val);

如果编译器不能内联(或以其他方式修改函数 f),它必须复制 T 并将其传递给 fconst 从调用代码的角度来看没有区别,只是在函数 f 内部。

示例 2:

T f(T const & val);

编译器将 val 的地址传递给函数,因此不需要复制。

然而,对小型/简单类型使用引用会导致额外的开销,因为参数是作为元素的地址传递的,f 的内容将不得不进行额外的操作来加载该地址然后加载 val 的实际内容。所以这是一个“复制 T 有多复杂以及函数 fval 的使用有多复杂”的问题,它决定了哪个将是最有效的。始终,如果您想要获得更好的性能,请衡量结果!

最后,如果编译器能够内联代码,它可能会消除一个对象的所有拷贝(假设构造函数是已知的并且不会阻止被消除 - 例如向构造函数添加 I/O 将阻止它被淘汰)。

关于c++ - 从编译器的角度来看,传递 const 值或 const ref 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com