在声明C ++期间使用值初始化类方法的参数

时间:2017-03-14 16:26:36

标签: c++ class methods

我正在研究另一个人的C ++代码,并且不明白为什么他们做了什么。

他们有一个通知类,它有一个名为check的公共方法,它将时间作为参数

void check(unsigned long time = 1);

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

notification1.check(currentTime);

我的问题是为什么他们在定义方法时给参数赋值?为什么不说,

void check(unsigned long time);

3 个答案:

答案 0 :(得分:2)

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

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

当一个函数传入一个默认参数时,你不需要在调用该函数时传递一个参数,你可以根据需要指定任意数量的默认参数。

答案 1 :(得分:1)

您是否可以访问check函数的实现?

因为函数声明中指定了默认参数,所以也可以不带参数调用它。 (例如:notification1.check())你应该在下面的每个场景中探讨check(...)函数的行为

  • 带参数的函数调用? (即notification1.check(currentTime))?
  • 函数调用WITHOUT参数? (即notification1.check())?

作为编码的最佳实践,必须使用成员函数声明记录这些行为。如果不是这样,你将不得不探索实施。

答案 2 :(得分:1)

这是默认参数。 http://en.cppreference.com/w/cpp/language/default_arguments解释了您对此C ++功能的所有想法。

  

我的问题是为什么他们在定义方法时给参数赋值?

如果默认参数未使用 where ,即如果始终使用非默认参数调用该函数,则可能是错误的设计决策。也许他们认为默认参数在最初设计代码时很有用,但现在证明没有有用的默认值。或许他们认为默认参数在将来可能仍然有用。

事实上,1 unsigned long time参数的可疑值,它看起来很像代表milliseconds since January 1st 1970的值。为什么不0