即将在函数中将引用作为参数传递以更改参数变量的值。

About to pass a reference as an argument in a function to alter the value of the argument variable.

我在阅读 "Beginning C++ Through Game Programming, Fourth Edition" 时发现一节关于将引用作为函数中的参数传递的部分说:

"仅当您想要更改值时才传递引用 的参数变量。但是,您应该尽量避免更改 尽可能使用参数变量。"

基本上它说我应该避免做这样的事情:

void swap(int& x, int& y)
{
    int temp = x;
    x = y;
    y = temp;
}

但是,我为什么要避免这样做呢?

我发现创建函数来更改变量非常有用,因为这些函数使我的代码井井有条,避免我在 main() 函数中编写每个变量更改,它们还避免我重复编写相同的代码。

如果我不应该这样做,还有什么选择?

在交换的情况下,应该使用引用传递,因为多个 变量在函数中被改变并且函数的预期行为是显而易见的。如果您只更改 一个 变量或有一个应该 return 结果的函数,那么最好 return 大部分值(除了一些例外)。例如,假设你有一个函数 sum():

int sum(int a, int b)
{
    return a + b;
}

这个函数的用法可能是:

int x = sum(1, 2); // Obvious and to the point

由于不需要更改任何变量,因此可以在此处使用按值传递(按 const 引用传递在这里无关紧要,因为 POD 类型非常小)。如果您在此处使用按引用传递,则函数将更改为:

void sum(int a, int b,  int& sum)
{
    sum = a + b;
}

上述函数的用法可能是:

int s;
sum(1, 2, s); // Obscure, unclear

这样做的缺点是不清楚函数的意图是什么,现在函数的结果不能在一行中传递给另一个函数。因此,仅在绝对 必要 .

时才应使用引用传递

附带说明,始终建议使用 const 引用将大对象传递给函数,因为它避免了复制。