即将在函数中将引用作为参数传递,以更改参数变量的值。 我通过游戏编程开始阅读C++,第四版,当我找到一个章节,在一个函数中传递一个引用作为参数:
仅当要更改值时才传递引用 参数变量的。然而,你应该尽量避免改变 参数变量,只要可能 基本上,它说我应该避免这样做:即将在函数中将引用作为参数传递,以更改参数变量的值。 我通过游戏编程开始阅读C++,第四版,当我找到一个章节,在一个函数中传递一个引用作为参数:,c++,function,reference,parameter-passing,pass-by-reference,C++,Function,Reference,Parameter Passing,Pass By Reference,仅当要更改值时才传递引用 参数变量的。然而,你应该尽量避免改变 参数变量,只要可能 基本上,它说我应该避免这样做: void swap(int& x, int& y) { int temp = x; x = y; y = temp; } 但是,我为什么要避免这样做呢 我发现创建函数来更改变量非常有用,因为这些函数使我的代码井然有序,避免了我在主函数中编写每个变量更改,也避免了我重复编写相同的代码 如果我不这样做,还有什么选择?对于交换,应该使用按引用传递
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
但是,我为什么要避免这样做呢
我发现创建函数来更改变量非常有用,因为这些函数使我的代码井然有序,避免了我在主函数中编写每个变量更改,也避免了我重复编写相同的代码
如果我不这样做,还有什么选择?对于交换,应该使用按引用传递,因为函数中有多个变量正在更改,并且函数的预期行为是显而易见的。如果您只更改了一个变量,或者有一个函数应该返回一个结果,那么最好在大多数情况下返回一个值,但有一些例外。例如,supoose您有一个函数sum: 此函数的用法可能是:
int x = sum(1, 2); // Obvious and to the point
int s;
sum(1, 2, s); // Obscure, unclear
因为不需要更改任何变量,所以在这里可以使用pass-by-value这里pass-by-const引用并不重要,因为POD类型非常小。如果在此处使用“按引用传递”,则函数将更改为:
void sum(int a, int b, int& sum)
{
sum = a + b;
}
上述函数的用法可能是:
int x = sum(1, 2); // Obvious and to the point
int s;
sum(1, 2, s); // Obscure, unclear
这样做的缺点是不清楚函数的意图是什么,现在函数的结果不能在一行中传递给另一个函数。因此,仅当绝对必要时才应使用pass-by-reference
另一方面,始终建议使用常量引用将大对象传递给函数,因为它避免了复制。对于交换,应使用按引用传递,因为函数中有多个变量正在更改,并且函数的预期行为是显而易见的。如果您只更改了一个变量,或者有一个函数应该返回一个结果,那么最好在大多数情况下返回一个值,但有一些例外。例如,supoose您有一个函数sum: 此函数的用法可能是:
int x = sum(1, 2); // Obvious and to the point
int s;
sum(1, 2, s); // Obscure, unclear
因为不需要更改任何变量,所以在这里可以使用pass-by-value这里pass-by-const引用并不重要,因为POD类型非常小。如果在此处使用“按引用传递”,则函数将更改为:
void sum(int a, int b, int& sum)
{
sum = a + b;
}
上述函数的用法可能是:
int x = sum(1, 2); // Obvious and to the point
int s;
sum(1, 2, s); // Obscure, unclear
这样做的缺点是不清楚函数的意图是什么,现在函数的结果不能在一行中传递给另一个函数。因此,仅当绝对必要时才应使用pass-by-reference
另一方面,始终建议使用const引用将大型对象传递给函数,因为它可以避免复制。但是,我为什么要避免这样做呢?问问作者,我们可能不知道他们的意图。但是,我为什么要避免这样做呢?问问作者,我们可能不知道他们的意图。