不同语言的函数重载隐藏的奥秘(函数重定义 不同的基类型)

不同语言的函数重载隐藏的奥秘(函数重定义 不同的基类型)

编码文章call10242025-02-01 3:40:2733A+A-

现实世界中"重载"无处不在,"某某可以做,这里为什么不可以做"不断告诉我们,人类从来都喜欢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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4