Of the operators, only the function call operator and the operator new can have default arguments when they are overloaded.
Parameters with default arguments must be the trailing parameters in the function declaration parameter list. For example:
void f(int a, int b = 2, int c = 3); // trailing defaults void g(int a = 1, int b = 2, int c); // error, leading defaults void h(int a, int b = 3, int c); // error, default in middle
Once a default argument has been given in a declaration or definition, you cannot redefine that argument, even to the same value. However, you can add default arguments not given in previous declarations. For example, the last declaration below attempts to redefine the default values for a and b:
void f(int a, int b, int c=1); // valid void f(int a, int b=1, int c); // valid, add another default void f(int a=1, int b, int c); // valid, add another default void f(int a=1, int b=1, int c=1); // error, redefined defaults
You can supply any default argument values in the function declaration or in the definition. Any parameters in the parameter list following a default argument value must have a default argument value specified in this or a previous declaration of the function.
You cannot use local variables in default argument expressions. For example, the compiler generates errors for both function g() and function h() below:
void f(int a) { int b=4; void g(int c=a); // Local variable "a" cannot be used here void h(int d=b); // Local variable "b" cannot be used here }
Related References