当我找到一个关于在一个函数中传递引用作为参数的部分时,我正在阅读“通过游戏编程开始C ++,第四版”。
“仅在您想要更改值时传递引用 参数变量。但是,您应该尽量避免更改 尽可能的参数变量。“
基本上它说我不应该做这样的事情:
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
但是,我为什么要避免这样做?
我发现创建更改变量的函数非常有用,因为这些函数保持我的代码组织,避免我在main()函数中编写每个变量,并且它们也避免我重复编写相同的代码。
如果我不这样做会有什么替代方案?
答案 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
引用将大对象传递给函数,因为它可以避免复制。