函数重载
如果同一作用域内的几个函数名字相同但是形参列表不同。
main 函数不能重载。 不允许两个函数返回类型外其他所有的要素都相同。
重载和const形参
- 一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来。
const_cast 和重载
去const操作。
建议
最好值重载那些确实非常相似的操作。有些情况给函数起不同的名字能使程序更加容易理解。
函数匹配(也叫重载确定)
- 编译器找到一个与实参最佳匹配的函数,并生成调用该函数代码
- 找不到任何一个函数与调用的实参匹配,此时编译器发出无匹配的错误
- 有多于一个函数可以匹配,但是每一个都不是明显的最佳选择。此时也将发生错误,称为二义性调用。
重载和作用域
C++语言名字查找发生在类型检查之前。
- 在不同的作用域当中无法重载函数名。
- 如果我们呢在内层作用域当中声明名字,它将隐藏外层作用域声明的同名实体。
string read() void print(const string &) void print(double); void fooBar(int val) { bool read = false; string s= read(); // 错误:read是一个布尔值,而分函数 void print(int); print(“Value”); // 错误: print(const string &) 被隐藏掉。 print(ival);// 调用 print(int) print(3.14); // 调用 print(int) }
- 如果将print(int) 和其他print函数声明在同一个作用域中.则它将成为另一中形式重载。
void print(const string &) void print(double); void print(int); void fooBar(int val) { print(“Value”); // 调用 print(const string &) print(ival);// 调用 print(int) print(3.14); // 调用print(double); }
|