Default arguments are often considered to be optional arguments,however a default argument is only optional in the sense that thecaller need not provide a value for it. The function must stillinstantiate the argument and must assign the appropriate value toit so, insofar as the function is concerned, the argument is notoptional.To implement a function with a truly optional argument, we candefine two overloads of that function, one that accepts theoptional argument (without specifying a default value) and one thatdoes not accept the argument. In this way we can define twodifferent implementations, one that uses the argument and one thatdoes not.void f (); // implementation that does not use the argumentvoid f (int); // implementation that does use the argumentIn many cases, a default argument incurs no significant overheadover that of overloading. Thus we'd only use overloading toimplement an optional argument where there is a significantoverhead incurred by a default argument. Even so, we must also beaware that by eliminating the overhead within the function itselfwe may simply be passing that overhead back to the callers, becausesome or all of them would then have to decide which overload tocall, resulting in code duplication that would likely be besthandled by the function itself.