Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即将在函数中将引用作为参数传递,以更改参数变量的值。 我通过游戏编程开始阅读C++,第四版,当我找到一个章节,在一个函数中传递一个引用作为参数:_C++_Function_Reference_Parameter Passing_Pass By Reference - Fatal编程技术网

即将在函数中将引用作为参数传递,以更改参数变量的值。 我通过游戏编程开始阅读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引用将大型对象传递给函数,因为它可以避免复制。

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