【问题标题】:About to pass a reference as an argument in a function to alter the value of the argument variable.即将在函数中将引用作为参数传递以更改参数变量的值。
【发布时间】:2018-07-13 22:21:51
【问题描述】:

我正在阅读“通过游戏编程开始 C++,第四版”时,我发现有一节要在函数中将引用作为参数传递:

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

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

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

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

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

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

【问题讨论】:

  • "但是,我为什么要避免这样做呢?"问作者,我们可能不知道他们的意图。

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


【解决方案1】:

在交换的情况下,应该使用引用传递,因为多个变量在函数中被改变并且函数的预期行为是显而易见的。如果您只更改 一个 变量或有一个应该返回结果的函数,那么最好在大多数情况下返回一个值(有一些例外)。例如,假设你有一个函数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 引用将大对象传递给函数,因为它可以避免复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多