在声明C 期间具有值的类方法的初始化参数

Initializing parameter of a class method with value during declaration C++

本文关键字:类方法 初始化 参数 声明      更新时间:2023-10-16

我正在处理另一个人C 代码,不明白他们为什么做某事。

他们有一个通知类,该类别具有称为Check的公共方法,该方法将时间用于参数

void check(unsigned long time = 1);

每次在代码中调用方法时,当前时间都传递给它。

notification1.check(currentTime);

我的问题是,当他们定义方法时,为什么它们给参数一个值?为什么不说

void check(unsigned long time);

这是因为如果在函数调用中没有参数,则默认参数值将用于 time,在这种情况下为 1。这称为默认参数

如果您调用check函数并且不提供参数,则编译器将将1的默认值分配给time。如果您在调用check函数时通过参数,则传递值将覆盖time的默认值。

当一个函数传递给它的默认参数时,您不需要在调用该函数时传递参数,并且您可以根据需要指定尽可能多的默认参数。

您是否可以访问检查功能的实现?

由于函数声明中指定了默认参数,因此您也可以在没有参数的情况下调用它。(例如:notification1.check())您应该在以下每个方案中探索检查(...)函数的行为

  • 用参数调用函数?(即notification1.check(currentime))?
  • 函数呼叫没有参数?(即notification1.check())?

作为编码的最佳实践,必须记录这些行为的成员函数声明。如果不是这种情况,则必须探索实现。

这是一个默认参数。http://en.cppreference.com/w/cpp/language/default_arguments解释了您想了解的有关此C 功能的所有信息。

我的问题是,为什么在定义方法时会给参数一个值?

如果未使用默认参数 whice ,即,如果始终以非默认参数调用该函数,则很可能是一个错误的设计决定。也许他们认为当他们最初设计代码时,默认参数很有用,但是现在事实证明没有有用的默认值。也许他们认为将来的默认论点可能仍然有用。

事实上,1 unsigned long time参数的可疑值,它看起来很像自1970年1月1日以来代表毫秒的值。为什么不0