Function signature system, which allows users to use the same function name in different functions as long as they differ in the combination of
- input arguments types
const
modifiers counts as a different input argument type- object
const
-ness (whether it’sconst
-method or not) – this only make sense with classes
and C++ will figure out what to call by matching the call with the available combinations (signatures).
C does not allow the same function name to be used in different places, so under the hood, it’s done through name mangling (generating a unique ‘under-the-hood’ function name based on the signature). This mechanism has a lot of implications that a professional programmer should observe:
- since C does not mangle its names in the object code, they’ll need to be wrapped around with
extern “C”
block in a C++ program so C++ won’t pervert (mangle) their function names with input arguments. - [24] parameter defaulting might be ambiguous with another function that does not have the said parameter (the compiler will cry about it)
- [26] access controls/levels must play no part in resolving signatures because access level must not change the meaning of a program!
C++ resolve function overloading using signatures within its local namespace. Function overloading works for both
- free functions (free functions are at the root namespace), as well as
- classes (the name of the class itself is the namespace)