有什么情况可以为变量赋一个void函数吗?

时间:2015-02-20 18:44:56

标签: c++ recursion

我正在攻读数据结构考试。通过前几年的一些考试,我遇到了一个关于为以下代码的运行时间找到表达式的问题:

void func(int n) {   
    if(n<=1)    
        return;
    cout << "some string" << endl;

    int x = func(n/2);

    cout << "some other string" << endl;

    int y = func(n/4) + func(n/4);

    for(int i=0; i<2*n; i++)
        cout << i << " x+y+i = " << x+y+i << endl; 

    return;
}

函数的名称,变量名称,字符串等都会更改,但其余部分不会更改。

是否有任何特殊情况,上面的代码甚至会编译? 我自己在一个在线视觉C ++编译器上检查了它并得到了关于将void视为int的预期错误...我仍然非常困惑这种基本错误是如何在CS考试中出现的。我更倾向于相信有一些我不熟悉的情况,其中上述语法是有意义的......无论是在C / C ++还是其他地方。

1 个答案:

答案 0 :(得分:1)

如图所示,代码毫无意义。它依赖于func的返回值,但func不返回任何内容(它是无效的)。

你可以有两个不同的函数func,但需要有一些东西可以区分它们。第一种方法是,如果他们采用不同的参数类型:

void func(int);
int func(double);

这似乎不是这种情况,因为您总是使用int进行通话。

第二个是如果它们在不同的命名空间中,或者如果一个是类成员而另一个不是。在这种情况下,您需要添加一些语法。

int x = other::func(n/2); // to use the namespace "other"
int x = ::func(n/2);      // to use a global