本文主要是介绍函数重载的奥秘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现实世界中”重载”无处不在,”某某可以做,这里为什么不可以做”不断告诉我们,人类从来都喜欢follow一些规则,不愿意改变。函数重载不是重载的全部,运算符一样可以重载。
重载形式
- C语言不支持重载,类似的函数不得不改名。
- ObjC类成员函数支持重载。
- C++开始的面向对象语言大部分支持重载,C++ const修饰符让string类型的重载更加麻烦,程序员可能要同时处理形如
const char*
和const std::string&
类型变量,C++17引入了std::string_view, 一种只读的表示字符串的string, 不包含真实字符串数据,只有查阅的权限,简化了代码。 - C#/Java支持重载。
- Python支持函数重载,用默认参数、可变参数和functools.singledispatch指示。
- JS没有真正的函数重载。
- Go/Rust不支持重载,Go官方给的说明是为了保持简单,这是语言设计者的意图,但事实上可能没有重载是个缺失。
类函数重载
- C++类在实现const和非const版本函数时,大部分代码都相同,但却要写2份代码。通过const_cast和as_const(C++17引入)轻松将非const版本转换成const版本。
类函数重载失效
- C++不希望某个函数特定类型参数被传入,可以显式指定废置重载。
- 例如void func(double)函数不希望传入int类型,void func(int) = delete废置int类型。
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!
这篇关于函数重载的奥秘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!