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

时间:2018-02-03 15:59:25

标签: c++ function reference parameter-passing pass-by-reference

当我找到一个关于在一个函数中传递引用作为参数的部分时,我正在阅读“通过游戏编程开始C ++,第四版”。

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

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

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

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

我发现创建更改变量的函数非常有用,因为这些函数保持我的代码组织,避免我在main()函数中编写每个变量,并且它们也避免我重复编写相同的代码。

如果我不这样做会有什么替代方案?

1 个答案:

答案 0 :(得分:4)

对于swap的情况,应该使用通过引用传递,因为函数中正在更改多个变量,并且函数的预期行为是显而易见的。如果您只是更改一个变量或者有一个应该返回结果的函数,那么最好返回大部分值(有一些例外)。例如,supoose你有一个函数sum()

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

此功能的用法可能是:

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

由于不需要更改任何变量,因此在这里使用pass by value(通过const引用并不重要,因为POD类型非常小)。如果您在此处使用了引用传递,则该函数将更改为:

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

上述功能的用法可能是:

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

缺点是不清楚函数的意图是什么,现在函数的结果不能传递给一行中的另一个函数。因此,仅在绝对必要时才能使用通过引用传递。

在旁注中,始终建议使用const引用将大对象传递给函数,因为它可以避免复制。