作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23820281
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://zhuanlan.zhihu.com/p/23820281
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:
- 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
- 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
- 本文仅作学习交流使用,禁止任何形式的转载
- 同一个作用域内
- 函数名相同
- 形参列表不同
其中形参列表不同是指
- 形参数量不同
- 或数量相同但形参类型不同
注意:
- 类型别名不构成重载
- 顶层const不构成重载
MZF: 我们不应该追求语法而强用重载,函数名还是要尽量保证见名知义的好
const_cast和重载
如果函数的形参和返回值等是底层const,我们可以利用const_cast和重载创建出函数的非const版本
在写重载函数时注意修改形参的const,否则无法构成重载
const string &Test( const string &s1 )
{
return s1;
}
string &Test( string &s1 )
{
auto &sResult = Test( const_cast<const string&>( s1 ) );
return const_cast<string &>( sResult );
}
这里可能不太明显,如果Test的实现很长的时候,这种技巧的优势就明显了。
重载与作用域
仅在同一作用域内才会构成重载
内层作用域中声明的函数将隐藏外层作用域中声明的同名实体(和变量没什么区别)