C ++是否允许函数在参数不足的情况下调用自身?

时间:2015-05-09 22:37:04

标签: c++

我知道这个问题听起来很荒谬,但我需要专家确认,所以请让我解释一下情况:

我正在调试一个C ++代码(很长,~5000行),我发现了一些奇怪的东西,我试图简化如下:

myClass.h
class myclass
{
  ...
  void myfun(int p1, int p2, mytype *p3, bool isFirstTime);
  ...
}
=================================================================
myClass.cpp
...
void myclass::myfun(int p1, int p2, mytype *p3, bool isFirstTime)
{
  ...
  if (mycond[y] == false)
  {
    myarr[y] = p1;
    myfun(y, y, p3);   <--- here no bool parameter given     (*)
  }
  ...
}
...

可以编译和运行代码,而不会出现任何错误或警告(对于函数myfun)。但由于代码中有很多if-else,我不确定在进程中是否实际调用了(*)行的命令。

所以问题是:这条线是否使用正确?如果正确,请解释我或给我一些关于此的信息&#34;输入&#34;功能。如果不正确,为什么编译时没有警告或错误?

2 个答案:

答案 0 :(得分:6)

如果该功能没有默认参数,例如

void f(int x, int y, int z = 0) // we can call inside f(1,2) since z is a default parameter

然后不,它不能用较少的参数调用自己。但是,它可以使用较少的参数调用重载版本:

void f(int x, int y); // one version
void f(int x, int y, int z); // another overload, this can call the first overload f(1,2)

因此请检查代码中的默认参数或重载版本。此外,默认参数应该放在头文件中,实现文件不必再次指定它们。

答案 1 :(得分:0)

是的,如果myfun过载是可能的。 所以,功能

myclass::myfun(int p1, int p2, mytype *p3);

需要存在,但是从你发布的片段中知道这一点是不可能的。