c++ 如何模拟全局变量?

00jrzges  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(134)

假设我有一个递归函数:

void Part(some args)
{
    int static count=0;
    if(condition)
        count++;
    else if(condition)
        return;
    else
        Part(different args)
}

基本上,我想看看在整个函数调用过程中,一个条件被满足了多少次。但是,我怎样才能把这个计数返回给main()函数呢?我使用了一个全局函数,它工作得很好,但是有些人说这是一个糟糕的实践。我不认为我可以使用一个普通的按值返回,因为它是一个递归函数。那么,有更好的方法吗?
我首先尝试将函数修改为按值返回,并在最后添加return count,以便返回最终计数,但这不起作用,因为我在函数中已经有一个空的return语句来手动停止控件。

nimxete2

nimxete21#

按照您编写递归的方式,只要满足所需的计数条件,或者满足某个结束条件,循环就会结束。只有在两个条件都不满足时,您才在循环。在这种情况下,您的count最多不会超过1。如果您真的想不停止地计数多个条件,请使用类似以下的语句:

int Part(some args)
{
    if (some end condition)
        return 0;
    else
        return 1 + Part(different args);
}

...

int count = Part(args);

另一方面,如果你想继续使用你展示的代码,但不想使用全局变量(不要使用static局部变量,否则你永远不能多次调用你的函数,因为你永远不能将变量重置回0),那么就使用一个输出参数代替,例如:

void Part(some args, int &count)
{
    if (some condition)
        ++count;
    else if (some other condition)
        return;
    else
        Part(different args, count);
}

int Part(some args)
{
    int count = 0;
    Part(args, count);
    return count;
}

...

int count = Part(args);
kjthegm6

kjthegm62#

int Part(some args, int count = 0)
{
   if (some condition)
       return count + 1;
   else if (different condition)
       return count;
   else
       return Part(different args, count);
}

int main() {
  std::cout << Part(some args) << "\n";
}

相关问题