Function argument names in function definitions are considered to be in the scope of the outermost block of the function. Therefore, they are local names and go out of scope when the function is exited.
Function argument names in function declarations (prototypes) are in local scope of the declaration and go out of scope at the end of the declaration.
Default arguments are in the scope of the argument for which they are the default, as described in the preceding two paragraphs. However, they cannot access local variables or nonstatic class members. Default arguments are evaluated at the point of the function call, but they are evaluated in the function declaration’s original scope. Therefore, the default arguments for member functions are always evaluated in class scope.