繁体   English   中英

C ++是否允许函数使用不足的参数来调用自身?

[英]Does C++ allow function to call itself with insufficient parameters?

我知道这个问题听起来很荒谬,但是我需要在这里得到专家的确认,因此请允许我解释一下这种情况:

我正在调试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 ,所以我不确定在过程中是否实际上调用了行(*)的命令。

所以问题是:此行是否正确使用? 如果正确,请向我解释或提供一些有关此“类型”功能的信息。 如果不正确,为什么在编译时没有警告或错误?

如果该函数没有默认参数,例如

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)

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

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

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

需要存在,但不可能从您发布的片段中得知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM