即将将引用作为函数中的参数传递以更改参数变量的值
About to pass a reference as an argument in a function to alter the value of the argument variable.
我正在阅读"通过游戏编程开始C++,第四版",当我发现一个部分即将在一个函数中传递引用作为参数时,它说:
"仅当您想要更改值时才传递引用 的参数变量。但是,您应该尽量避免更改 尽可能使用参数变量。
基本上它说我应该避免做这样的事情:
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
但是,我为什么要避免这样做呢?
我发现创建函数来更改变量非常有用,因为这些函数使我的代码井井有条,避免我在main()函数中编写每个变量更改,并且它们也避免我重复编写相同的代码。
如果我不应该这样做,还有什么选择?
在交换的情况下,应使用按引用传递,因为函数中正在更改多个变量,并且函数的预期行为很明显。如果您只更改一个变量或有一个应该返回结果的函数,那么最好在大多数情况下返回一个值(有一些例外)。例如,支持你有一个函数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
引用将大型对象传递给函数,因为它可以避免复制。
相关文章:
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 扩展可变参数模板中的变量名称
- 在类构造函数中定义结构变量的参数
- 带有整数的变量参数列表
- 转发变量参数列表以模拟 std::thread
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 存储稍后要转发的变量参数
- C++具有模板成员变量的类. 和参数内存输出
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- 为变量模板的每个参数调用模板函数
- 具有推导参数的模板函数指针数组变量
- 函数参数变量总是需要 & 或 * 运算符吗?
- 为什么 beginthreadex 线程参数变量在父线程中没有更新
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 如何在函数中使用非参数变量?
- 即将将引用作为函数中的参数传递以更改参数变量的值
- 基于不断变化的参数/变量的XML get值
- cocos2d-x v3 CallFunc作为参数/变量如何
- 在编译时使用c++元编程中的运行时参数(变量)
- 我可以返回一个非参数变量吗?