我正在研究另一个人的C ++代码,并且不明白为什么他们做了什么。
他们有一个通知类,它有一个名为check的公共方法,它将时间作为参数
void check(unsigned long time = 1);
每次在代码中调用方法时,都会将当前时间传递给它。
notification1.check(currentTime);
我的问题是为什么他们在定义方法时给参数赋值?为什么不说,
void check(unsigned long time);
答案 0 :(得分:2)
那是因为如果在函数调用中没有提供参数,则默认参数值将用于time
,在这种情况下为1
。这称为Default Argument
如果您调用check
函数并且不提供参数,编译器将为1
分配默认值time
。如果在调用check
函数时传递参数,则传递的值将覆盖默认值time
。
当一个函数传入一个默认参数时,你不需要在调用该函数时传递一个参数,你可以根据需要指定任意数量的默认参数。
答案 1 :(得分:1)
您是否可以访问check函数的实现?
因为函数声明中指定了默认参数,所以也可以不带参数调用它。 (例如:notification1.check())你应该在下面的每个场景中探讨check(...)函数的行为
作为编码的最佳实践,必须使用成员函数声明记录这些行为。如果不是这样,你将不得不探索实施。
答案 2 :(得分:1)
这是默认参数。 http://en.cppreference.com/w/cpp/language/default_arguments解释了您对此C ++功能的所有想法。
我的问题是为什么他们在定义方法时给参数赋值?
如果默认参数未使用 where ,即如果始终使用非默认参数调用该函数,则可能是错误的设计决策。也许他们认为默认参数在最初设计代码时很有用,但现在证明没有有用的默认值。或许他们认为默认参数在将来可能仍然有用。
事实上,1
是unsigned long time
参数的可疑值,它看起来很像代表milliseconds since January 1st 1970的值。为什么不0
?