news 2026/6/10 3:07:11

【C++入门】Cyber骇客的同名异梦——【C++重载函数】(与C的函数差异)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++入门】Cyber骇客的同名异梦——【C++重载函数】(与C的函数差异)



⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///

[WARNING]: DETECTING HIGH ENERGY

🌊 🌉 🌊 心手合一 · 水到渠成

>>> ACCESS TERMINAL <<<
[ 🦾 作者主页 ][ 🔥 C语言核心 ]
[ 💾 编程百度 ][ 📡 代码仓库 ]
---------------------------------------
Running Process: 100% | Latency: 0ms

索引与导读

  • 📘1)核心定义
  • 📘2)如何构成重载
    • 2.1 参数类型不同
    • 2.2 参数个数不同
    • 2.3 参数顺序不同
  • 📘3)常见误区与陷阱
    • 3.1)返回值类型不同 不构成重载
    • 3.2)缺省参数导致的二义性
    • 3.3)类型别名
  • 📘4)为何C语言不支持函数重载?
  • 函数重载代码示例
  • 💻结尾— 核心连接协议

📘1)核心定义

在自然语言中,一个词在不同语境下可能有不同的含义(一词多义)。在C++ 中函数重载允许在同一作用域中声明多个名称相同形参列表不同的函数。

我们在调用函数时,编译器会根据传递的实参类型,自动推演并匹配最合适的那个函数版本。这属于C++静态多态(Static Polymorphism)的一种体现,即在编译期间就确定了具体的函数调用



📘2)如何构成重载

🚩要让两个同名函数共存,它们的函数签名必须不同

  • 主要体现在以下三个维度:

2.1 参数类型不同

#include<iostream>usingnamespacestd;voidprint(inti){cout<<"Int: "<<i<<endl;}voidprint(doubled){cout<<"Double: "<<d<<endl;}intmain(){print(10);// 匹配 print(int)print(3.14);// 匹配 print(double)return0;}

2.2 参数个数不同

voidfunc(inta){cout<<"One parameter"<<endl;}voidfunc(inta,intb){cout<<"Two parameters"<<endl;}

2.3 参数顺序不同

voidfunc(inta,charb);// 版本 1voidfunc(chara,intb);// 版本 2,构成重载


📘3)常见误区与陷阱

3.1)返回值类型不同 不构成重载

intadd(inta,intb);voidadd(inta,intb);// ❌ 错误:编译报错

原因:在调用函数时(例如add(1, 2);),调用者可以选择忽略返回值。此时编译器无法根据上下文判断应该调用哪一个函数,从而产生二义性


3.2)缺省参数导致的二义性

虽然两个函数参数个数不同可以重载,但如果结合了默认参数,可能会翻车

voidfunc(inta,intb=10){cout<<"Version 1"<<endl;}voidfunc(inta){cout<<"Version 2"<<endl;}intmain(){// func(10, 20); // OK, 调用 Version 1// func(10); // ❌ 错误:二义性!// 编译器OS:你是想调用 Version 2,还是想调用带有默认参数的 Version 1?我太难了。return0;}

3.3)类型别名

typedefintInteger;voidfunc(inta);voidfunc(Integer a);// ❌ 错误:重定义

原因:Integer本质上就是int,编译器眼里它们是完全一样的东西



📘4)为何C语言不支持函数重载?

  • C 语言的处理方式

C语言编译器在编译代码时,生成的符号表中,函数名就是源代码中的名字

源码:void add(int a, int b)

符号表:_add

如果在C语言中写两个add函数,符号表中就会有两个_add,链接器在链接时就会报错:"Multiple definition of symbol"(符号重定义)

  • C++ 的“名称修饰”
    C++为了支持重载,引入了名称修饰机制

编译器会根据函数的参数类型参数个数参数顺序等信息,对函数名进行“加密”和修饰,生成一个全局唯一的符号名

以 GCC 编译器为例(不同编译器规则不同):


结论:
虽然我们在代码里看到的都是func,但在编译器的眼里,它们分别是_Z4funci_Z4funcd_Z4funcii
由于底层的符号名不同,链接器自然就能区分它们,从而实现了重载



函数重载代码示例

#include<iostream>usingnamespacestd;// 1. 参数类型不同intAdd(intleft,intright){cout<<"int Add(int left, int right)"<<endl;returnleft+right;}doubleAdd(doubleleft,doubleright){cout<<"double Add(double left, double right)"<<endl;returnleft+right;}// 2. 参数个数不同voidf(){cout<<"f()"<<endl;}voidf(inta){cout<<"f(int a)"<<endl;}// 3. 参数类型顺序不同voidf(inta,charb){cout<<"f(int a, char b)"<<endl;}voidf(charb,inta){cout<<"f(char b, int a)"<<endl;}// 返回值不同不能作为重载条件,因为调用时也无法区分//void fxx()//{}////int fxx()//{// return 0;//}// 下面两个函数构成重载// f() 但是调用时,会报错,存在歧义,编译器不知道调用谁voidf1(){cout<<"f()"<<endl;}voidf1(inta=10){cout<<"f(int a)"<<endl;}intmain(){Add(10,20);Add(10.1,20.2);f();f(10);f(10,'a');f('a',10);return0;}


💻结尾— 核心连接协议

警告:🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠


【📡】 建立深度链接:关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。

【⚡】 能量过载分发:执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。

【💾】 离线缓存核心:将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。

【💬】 协议加密解密:评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。

【🛰️】 信号频率投票:通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。



版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:23:53

泰裤辣!NGS数据过滤:从“大怨种”到“高质量数据”

做NGS&#xff08;下一代测序/高通量测序&#xff09;实验时&#xff0c;我们总盼着测序仪“吐”出的原始数据能直接用——毕竟从样本制备到上机测序&#xff0c;每一步都耗费了时间和经费。但现实是&#xff0c;刚拿到的原始数据里藏着不少“杂质”&#xff0c;直接用来分析只…

作者头像 李华
网站建设 2026/6/10 12:38:58

【CSDN创作者成长】-草稿箱在哪里?

CSDN草稿箱大揭秘&#xff1a;躲猫猫的草稿箱在哪里&#xff1f; 各位CSDN的小伙伴们&#xff0c;有没有遇到过这种尴尬时刻&#xff1a;灵感爆发写了一篇绝世好文&#xff0c;结果保存后却像人间蒸发一样找不到了&#xff1f;别担心&#xff0c;你不是一个人&#xff01;今天…

作者头像 李华
网站建设 2026/6/3 15:02:52

【收藏必备】网络安全攻防全攻略:6大黑客入侵技术详解与学习路径

一、黑客常用的入侵方式 黑客常用的渗透方法大体可以分为6类&#xff1a;获取口令入侵、远程控制入侵、木马入侵、系统漏洞入侵、电子邮件入侵、网络监听入侵等。 1.获取口令入侵 顾名思义&#xff0c;就是获取到管理员或者用户的账号、密码&#xff0c;进而窃取系统信息。获…

作者头像 李华
网站建设 2026/6/10 13:45:22

【VirtualBox】【启动报错】

报错 VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE). VirtualBox cant operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_VMX_IN_VMX_ROOT_MODE). 返回 代码: NS_ERROR_FAILURE (0x80004…

作者头像 李华
网站建设 2026/6/10 15:36:05

门店管理系统价格解析:数千元到数十万元,受多重因素影响

当今&#xff0c;零售业数字化进程持续深入&#xff0c;那时门店管理系统已然成为实体商家用以提升运营效率以及优化顾客体验的核心工具。面对市场里琳琅满目的产品&#xff0c;好多商家首先所关心的问题是&#xff1a;一套门店管理系统所需投入的费用是多少&#xff1f;实际上…

作者头像 李华
网站建设 2026/6/10 13:46:40

python基于vue的在线考试试卷批阅系统django flask pycharm

目录技术栈概述核心功能模块关键技术实现开发工具链扩展性设计开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;技术栈概述 Python作为后端开发语言&#xff0c;结合Django或Flask框架构建RE…

作者头像 李华