gpt4 book ai didi

c++ - 如何在 C++ 中通过引用传递 "literal"整数(新手)

转载 作者:IT老高 更新时间:2023-10-28 22:23:00 26 4
gpt4 key购买 nike

编辑:正如许多人所指出的,传递引用通常不适合作为原始类型的优化。很高兴知道这一点,所以谢谢大家!即便如此,我的问题实际上更多的是关于为什么文字值似乎不能通过引用传递,这已通过接受的答案得到解决。干杯!


(原谅我的天真:我对 C++ 还很陌生。)

为了避免在调用函数(比如“fillRect”)时按值复制效率低下,我想通过引用传递参数。

如果我将参数作为声明的局部变量提供,它可以正常工作。但是,如果我提供任何“文字”整数,则会出现编译错误(没有匹配的函数)。

void fillRect( int &x, int &y, int &width, int &height )
{
// do something
}

int x=10, y=20, w=100, h=80;

fillRect(x, y, w, h); // this compiles and works!
fillRect(x, y, 100, 80); // but this doesn't compile ... why?

什么给了?

最佳答案

您不能将文字绑定(bind)到对非 const 的左值引用(因为修改文字的值不是有意义的操作)。但是,您可以将文字绑定(bind)到对 const 的引用。

因此,如果您将 fillRect 声明为:

void fillRect(int const& x, int const& y, int const& width, int const& height)

在这种情况下,您传递的是 ints。 int 复制起来非常便宜,以引用方式传递它们可能会使程序的性能变差。

fillRect 函数可能非常昂贵,以至于在任何情况下传递其参数的成本都完全无关紧要。或者它可能会被内联,并且传递参数不会有任何成本。这些类型的微优化通常根本不是优化,应该始终以分析结果为指导(如果已经完成的话)。

关于c++ - 如何在 C++ 中通过引用传递 "literal"整数(新手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701221/

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