Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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++ - Fatal编程技术网

C++ 将代码转移到子函数

C++ 将代码转移到子函数,c++,C++,我在一个函数中有一些代码,我想将它们分离成它自己的函数。我希望在尽可能少地修改原始代码的情况下完成此操作。下面我编写了一个noddy示例,其中代码段只是“x+=y”。我想把代码取出,放到它自己的函数中。对于C,我必须通过将y改为指针,然后使用它来实现这一点。但我记得在某个地方(现在已经忘记了),C++中有一些技巧,我可以把变量传递给代码“x+y”。 仅供参考:我想在进行调用图分析时执行此过程(稍后可能会反转) void main() { int x = 2; int y = 5;

我在一个函数中有一些代码,我想将它们分离成它自己的函数。我希望在尽可能少地修改原始代码的情况下完成此操作。下面我编写了一个noddy示例,其中代码段只是“x+=y”。我想把代码取出,放到它自己的函数中。对于C,我必须通过将y改为指针,然后使用它来实现这一点。但我记得在某个地方(现在已经忘记了),C++中有一些技巧,我可以把变量传递给代码“x+y”。 仅供参考:我想在进行调用图分析时执行此过程(稍后可能会反转)

void main()
{
    int x = 2;
    int y = 5;

    #if KEEP_IN_BIG_FUNC

        x += y;

    #else // put in sub function

        sub_function(y,&x);

    #endif

    printf("x = %d\n",x); // hopefully will print "7"
}

void sub_function(int y,int *x)
{
    *x += y;
}

这种技巧称为通过引用传递。C++常见问题在这里有很好的参考文献部分:


您可以通过引用传递变量:

void sub_function(int y, int& x)
{
   x+=y
}
void sub_function(int y, int &x) { 
    x += y;
}

我相信你要找的是推荐人。在您的示例中,函数
sub_函数
将如下所示:

void sub_function(int y, int& x)
{
  x += y;
}
你可以这样称呼它:

sub_function(y, x);

这叫做传递引用:

void sub_function(int y, int& x)
{
   x+=y
}
void sub_function(int y, int &x) { 
    x += y;
}
被称为:

sub_function(y,x);

顺便说一句,与将KEEP_IN_BIG_FUNC设置为1的main函数相比,将sub_函数内联对性能没有影响。

实际上为了可读性,最好将结果作为真函数返回:int sub_函数(int y,int x){return(x+=y);}对于整数,当然。但是对于大型或用户定义的类型,通过引用传递的效率将超过可读性。请不要在没有对答案做一点工作的情况下发布链接。为什么不呢?该链接清楚地、全面地解释了C++中引用的工作方式。如果OP阅读了它,他将学到他需要知道的东西,至少就像我在这里输入答案一样。