当前位置: 首页 > article >正文

【C++入门】命名空间、缺省参数、函数重载

这里我就不过多的进行描述了有兴趣的可以去网络搜索一番。总而言之从名称上面我们也可以看得出来C是在C的基础上进行不断地优化发展。事实上确实是这样C语言中90以上的语法在C中都适用。同时我们还要知道C作为众多编程语言中的一种它的排名始终是位于前列的并且涉及到的领域也是非常的多就比如以下几个领域操作系统以及大型系统软件开发、.....由此我们可见C的重要性。接下来我们话不多说进入正题。命名空间首先我们来看C语言中的下面这一段代码代码语言javascriptAI代码解释#includestdio.h #includestdlib.h int rand 10; int main() { printf(%d , rand); return 0; } //运行后会报错error C2365 : “rand”: 重定义以前的定义是“函数”这里报错是因为我们定义的变量rand它与库函数里的rand函数名称发生了冲突在C语言中对于此类问题是无法得到有效解决的除非就是自己换一个名称但是在C中针对此类问题是可以通过命名空间关键字namespace得到解决的。域在了解命名空间之前我们先来了解一下域这个概念我们目前所知的域就是全局作用域以及局部作用域局部域与全局域的使用以及生命周期都是不同局部域作用于局部只能在局部使用一般都是自己所在的{}内生命周期出了作用域就会自动销毁。而全局域则是作用于整个工程生命周期也是随着工程的结束而结束。 并且当局部与全局冲突时局部优先。就比如下面这段代码代码语言javascriptAI代码解释#includestdio.h int a 10;//作用于全局 void test() { int a 20;//只能在{}内使用 printf(%d , a);//局部与全局冲突时局部优先这里的a优先在局部域内查找 //如果找不到再去全局查找a进行匹配如果全局还是没找到则报错 //这里优先在局部匹配到了20所以打印结果为20 } int main() { test(); return 0; }但是假如一定要在test中打印的a是位于全局的a而不是局部a应如何做呢这里就涉及到了作用域限定符如下代码语言javascriptAI代码解释#includestdio.h int a 10;//作用于全局 void test() { int a 20;//只能在{}内使用 printf(%d , a);//局部与全局冲突时局部优先这里的a优先在局部域内查找 //如果找不到再去全局查找a进行匹配如果全局还是没找到则报错 //这里优先在局部匹配到了20所以打印结果为20 printf(%d , ::a); // ::前面有个空格意思为在全局域中查找a进行匹配这里的印出来的是10 } int main() { test(); return 0; }命名空间了解域后接下来我们来讲一下命名空间它的关键字为namespace具体使用namespace{}花括号内为命名空间的成员。它的作用是命名空间域也就是说将命名空间内的所有成员作为一个域但是注意一点就是命名空间域只影响成员的使用但是不影响生命周期。如下代码语言javascriptAI代码解释namespace qdy { // 命名空间中可以定义变量/函数/类型 int rand 10; int Add(int x, int y) { return x y; } struct Node { struct Node* next; int val; }; }了解它的用法后接下来我们该怎么使用命名空间呢具体有三种方法用using将命名空间全局展开在做项目时不建议使用做练习时可以利用指定命名空间 一般做项目时使用此方式用using 将命名空间常用展开代码语言javascriptAI代码解释//命名空间全局展开 using namespace std;//std为C标准库 //指定命名空间 std::cout hellow world\n std::endl; //命名空间常用展开 using std::cout; using std::endl;举个例子还是上面的rand假如我想自己使用自己的rand避免和库函数中的rand发生命名冲突可以这么来用代码语言javascriptAI代码解释#includeiostream #includestdlib.h namespace qdy { int rand 10; } int main() { qdy::rand;//这里的rand与qdy域里的rand进行匹配也就是10即11 printf(%d , qdy::rand);//打印结果为11 return 0; }同样假如我们在与他人同时进行某一项工程时最后为了避免与他人发生命名冲突我们就可以利用命名空间来完美解决这个问题但是假如放在C语言的环境下这个问题是解决不了的只能有一方主动服软改成不一样的名字才行。如下代码语言javascriptAI代码解释#includeiostream struct Node { struct Node* left; struct Node* right; int val; }; namespace qdy { struct Node { struct Node* next; int val; }; } int main() { struct qdy::Node Q;//这里上面两个结构体命名发生冲突都是叫Node //但是我们想要用下面的Node就可以利用命名空间 //这里的 Q就是指下面的结构体 return 0; }C输入/输出相信在我们入门C语言时的hello world是梦开始的地方在C语言中的输入输出为scanf与printf接下来我们看下面这样一段简单的代码代码语言javascriptAI代码解释#includeiostream using namespace std; int main() { int n 0; cin n; for (int i 0; i n; i) { cout hello world endl; } return 0; }这段代码执行后的结果是这样的在这里我们要知道cout标准输出对象写到控制台以及cin标准输入对象从键盘中读取它们两个的作用正是对应着C语言里的printf以及scanf。而endl的作用就相当于C语言里的\n换行符是流插入运算符是流提取运算符在C语言中我们使用scanf与printf时要手动加上固定的格式比如输入一个字符串要加上%s输入一个整形要加%d浮点型%f等。但是C中的输入输出则不需要手动输入格式C中的输入输出会自动识别类型。在使用cout以及cin与endl时需要包含头文件iostream,并且要按照命名空间的使用方式来使用stdstd为C标准库。缺省参数概念缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参。(C语言不支持缺省参数)具体是咋回事呢我们通过一段代码即可理解代码语言javascriptAI代码解释#includeiostream using namespace std; void test(int a 10) { cout a endl; } int main() { test();//10这里我没有传参数但是函数形参里定义了int a10,所以输出的就是10 test(20);//20这里我们传送参数20虽然形参里定义了a10但是由于我们传了参数所以a10就相当于形同虚设 //因此这里打印的是20 }是不是很好理解举个不起恰当的例子缺省参数有点类似生活中的”备胎“当没有别的选择时才用的到你但是只要有人出现你就gg了另外缺省参数还分为全缺省参数以及半缺省参数所谓全缺省参数就是函数的形参全都有指定的值而半缺省参数则是只有一部分的形参有指定值。如下代码语言javascriptAI代码解释//全缺省参数 void Func(int a 10, int b 20, int c 30); //半缺省参数 void Func(int a,int b10, int c20); //这里需要注意半缺省参数必须从右往左依次来给出不能间隔着给即不可以写成int a10,int b,int c30这种形式 //另外缺省参数不能在函数声明和定义中同时出现切记函数重载首先我们先了解一下什么是重载中国语言博大精深往往同一个词在不同的情况下有不同的意义就比如说我们在夸赞一个人时对他说你可真行但是当一个人把事情搞砸时我们再对他说你可真行。这里同样的语句却截然不同的意义这就是重载。函数重载则是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型不同的问题。就比如下面的代码参数类型不同代码语言javascriptAI代码解释// 1、参数类型不同 //都为int int Add(int left, int right) { cout int Add(int left, int right) endl; return left right; } //都为double double Add(double left, double right) { cout double Add(double left, double right) endl; return left right; } int main() { Add(1,2);//3 Add(1.1.2.2);//3.3 //不会报错但如果是在C语言的环境下则会报错Add重定义具体原因后面会讲 return 0; }参数个数不同代码语言javascriptAI代码解释// 2、参数个数不同 void f() { cout f() endl; } void f(int a) { cout f(int a) endl; } int main() { f();//f() f(1);//f(int a) }形参的类型顺序不同代码语言javascriptAI代码解释//int 在前char在后 void f(int a, char b) { cout f(int a,char b) endl; } //char在前int 在后 void f(char b, int a) { cout f(char b, int a) endl; }可能我们会有个疑问为什么C语言不支持而C却支持呢这里涉及到了函数名修饰规则这里由于windows下的命名规则太过繁杂我们在Linux环境下进行演示。我们知道一个程序要运行起来要经历以下几个阶段预处理、编译、汇编、链接而在链接阶段链接器是如何来寻找我们调用的Add函数呢答案是通过编译器的函数名修饰规则这里我们分别演示C和C两种环境下链接器是如何查找Add的。因此我们得出结论在linux下采用gcc编译完成后函数名字的修饰没有发生改变。接下来我们观察C环境下通过这里就理解了C语言没办法支持重载因为同名函数没办法区分。而C是通过函数修饰规则来区分只要参数不同修饰出来的名字就不一样就支持了重载。另外如果两个函数函数名和参数是一样的返回值不同是不构成重载的因为调用时编译器没办法区分。

相关文章:

【C++入门】命名空间、缺省参数、函数重载

这里我就不过多的进行描述了,有兴趣的可以去网络搜索一番。总而言之,从名称上面我们也可以看得出来,C是在C的基础上进行不断地优化发展。事实上确实是这样,C语言中90%以上的语法在C中都适用。同时我们还要知道C作为众多…...

3分钟终极指南:用KMS智能激活脚本永久激活Windows和Office

3分钟终极指南:用KMS智能激活脚本永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活弹窗而烦恼吗?或者Office突然变成只读模…...

必知必会:奖励模型训练与PPO稳定训练方法详解

必知必会:奖励模型训练与PPO稳定训练方法详解 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次的学习者和开发者提供从完整学习路径。 github地址:AI-Compass👈:https://github.com/tingaicompass/AI-Com…...

必知必会:大模型对齐数据构造与PPO算法详解

必知必会:大模型对齐数据构造与PPO算法详解 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次的学习者和开发者提供完整学习路径。 github地址:AI-Compass👈:https://github.com/tingaicompass/AI-Compass…...

ToastFish:如何在工作间隙悄无声息地提升英语词汇量?

ToastFish:如何在工作间隙悄无声息地提升英语词汇量? 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 你是否曾经想过,那些在等待会议开始、代码编译或文件下…...

不止画板子:用嘉立创EDA专业版搞定面板打印,从设计到下单全流程解析

不止画板子:用嘉立创EDA专业版搞定面板打印,从设计到下单全流程解析 当硬件产品经理或工业设计师完成PCB设计后,如何为产品打造专业的外观面板?嘉立创EDA专业版的面板打印功能,让您无需切换软件就能实现从电路设计到外…...

基于Foundation Models框架的AI应用开发实战指南

1. 项目概述:一个面向基础模型应用开发的实战框架最近在GitHub上看到一个挺有意思的项目,叫rudrankriyam/Foundation-Models-Framework-Example。光看名字,可能有点抽象,但如果你正在尝试将像GPT、Claude、Llama这类大语言模型&am…...

树莓派PICO的板载LED还能这么玩?用MicroPython做个呼吸灯和SOS求救信号

树莓派PICO的创意灯光秀:从呼吸灯到SOS信号的MicroPython实战 第一次看到树莓派PICO板载的那颗蓝色LED时,你可能觉得它只是个简单的状态指示灯。但在这个小小的发光二极管背后,隐藏着无限的可能性。今天,我们就来解锁这颗LED的创意…...

基于MCP协议构建AI趋势分析工具:连接Google Trends与智能助手

1. 项目概述:一个连接趋势数据与AI的桥梁如果你正在构建一个需要实时洞察市场动态、追踪社交媒体热点或分析行业趋势的AI应用,那么你很可能面临一个核心痛点:如何让AI模型(比如ChatGPT、Claude等)直接、可靠地获取到这…...

MCP 2026医疗数据跨境传输新规生效在即:三甲医院已启动紧急审计,你还在用传统API网关?

更多请点击: https://intelliparadigm.com 第一章:MCP 2026医疗数据跨境传输新规的核心要义与合规边界 监管框架的结构性跃迁 MCP 2026(Medical Cross-border Protocol 2026)并非对既有《个人信息出境标准合同办法》的简单修订&…...

OpenClaw时空之锚——从离散指令到硅基时空连续体的本体论坍缩(第二十二篇)

OpenClaw时空之锚——从离散指令到硅基时空连续体的本体论坍缩(第二十二篇)导言:当龙虾挣脱离散的钟摆,时间便有了肉体在4月26日实时传输协议赋予Agent“感觉运动通路”后,4月29日的更新以一种近乎暴烈的方式&#xff…...

Provision CLI:将AI工作流转化为可复用技能,破解团队知识孤岛

1. 项目概述:从零散经验到可复用的AI技能在AI工具深度融入日常工作的今天,一个普遍且令人头疼的现象是:团队里总有人能摸索出一套高效的工作流,比如用Claude Code快速生成特定业务场景的代码,或者用Cursor精准地重构某…...

LILYGO 7.5英寸电子墨水屏与ESP32开发实战指南

1. 项目概述:LILYGO 7.5英寸电子墨水屏与ESP32开发板组合方案作为一名长期关注嵌入式显示技术的开发者,最近LILYGO推出的7.5英寸电子墨水屏(E-Paper)引起了我的注意。这款售价52美元的大尺寸显示屏完美适配该品牌多款T5系列ESP32开…...

SOCD Cleaner终极指南:5分钟解决游戏按键冲突的免费方案

SOCD Cleaner终极指南:5分钟解决游戏按键冲突的免费方案 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏的巅峰对决中,毫秒级的操作延迟可能决定胜负。当玩家同时按下W和S键时…...

GEM框架下的强化学习环境设计与多智能体交互实践

1. 为什么需要GEM框架下的强化学习环境在强化学习领域,环境模拟一直是个头疼的问题。我刚开始做多智能体研究时,最痛苦的就是每个项目都要从头搭建测试环境。不同论文的环境接口五花八门,有的用OpenAI Gym标准,有的自定义协议&…...

Ex-Omni框架:用自然语言生成3D面部动画的实战指南

1. 项目背景与核心价值去年在参与一个虚拟数字人项目时,我们团队曾为如何让AI生成的面部动画更自然真实而头疼。传统方案要么依赖复杂的动作捕捉设备,要么需要美术师逐帧调整,成本高且效率低下。直到接触到Ex-Omni这个开源框架,才…...

多模态AI技术助力听障沟通:HI-TransPA系统解析

1. 项目背景与核心价值作为一名长期关注无障碍技术发展的从业者,我见证了太多听障人士在语音沟通场景中面临的困境。传统的手语翻译服务存在人力成本高、响应延迟大等问题,而市面上大多数语音转文字工具又难以处理复杂的环境音和方言口音。这就是我们团队…...

从账单明细看 Taotoken 按 token 计费如何帮助项目厘清成本

从账单明细看 Taotoken 按 token 计费如何帮助项目厘清成本 1. 账单明细的核心价值 在项目管理中,资源消耗的透明化是成本控制的基础。Taotoken 提供的账单明细功能将每个 API Key 的调用记录按模型分类统计,精确到 token 粒度的计费方式让团队能够追溯…...

qapyq:AI模型训练数据集的图像管理与标注工作站实战指南

1. 项目概述:一个为AI模型训练而生的图像管理与标注工作站 如果你正在为Stable Diffusion、LoRA或者任何生成式AI模型准备训练数据集,那你一定体会过那种在成千上万张图片和文本标签之间反复横跳的痛苦。传统的看图软件和文本编辑器在这种高强度、高精度…...

基于Granite模型的本地智能体系统:RAG与图像研究实战

1. 项目概述:基于Granite模型构建的智能体系统 如果你正在寻找一个能在本地高效运行、功能强大且开箱即用的智能体(Agent)框架,那么IBM开源的Granite Retrieval Agent和Image Research Agent项目绝对值得你花时间深入研究。这两个…...

一个FIR IP搞定四路信号滤波:Xilinx Vivado 2017.4多通道复用实战(附Verilog源码)

Xilinx Vivado多通道FIR滤波器复用架构设计与实现 在数字信号处理系统中,有限脉冲响应(FIR)滤波器因其线性相位特性和稳定性被广泛应用。然而,当系统需要同时处理多个通道的信号时,传统的为每个通道单独实例化FIR滤波器的方法会导致FPGA资源消…...

【flutter for open harmony】第三方库Flutter 鸿蒙版 MD5加密 实战指南(适配 1.0.0)✨

【flutter for open harmony】第三方库Flutter 鸿蒙版 MD5加密 实战指南(适配 1.0.0)✨ Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net 本文详细介绍…...

明辨是非4:一个父亲与七年级儿子的历史思辨课——历史的坐标:从哈拉和林到民族互化,如何理解征服与民族融合

声明:如果您看到的是非微信公众号的转发,希望您来微信公众号:青寕信安,可以最快的看到及时发布的原文,而且不容易被删节。青润在这里欢迎每一位朋友的到来!关于此话题的相关文章前文回顾,与此话…...

CPU集群高效训练大模型:Horizon-LM方案解析

1. Horizon-LM项目概述在大型语言模型(LLM)训练领域,GPU资源的高成本和稀缺性始终是制约技术发展的瓶颈。Horizon-LM项目提出了一种创新思路:通过算法优化和系统架构重构,实现基于普通CPU集群的高效大模型训练方案。这…...

大型语言模型安全评估:红队测试方法与RedBench实践

1. 大型语言模型安全评估的现状与挑战在人工智能技术快速发展的今天,大型语言模型(LLM)的安全性问题日益凸显。作为AI领域的前沿研究者,我深刻体会到安全评估已成为模型开发过程中不可忽视的关键环节。传统的人工测试方法已无法满足现代LLM的复杂安全需求…...

SciDER系统:基于LLM的科研自动化平台解析

1. SciDER系统概述:数据驱动的科研自动化革命科研工作者每天需要处理海量实验数据,从原始数据清洗到特征工程,再到模型训练和结果分析,整个过程耗时费力。传统科研流程存在两大痛点:一是人工处理原始数据效率低下且容易…...

游戏机存储方案:WORM特性与USB NAND技术解析

1. 游戏机存储方案的核心需求解析现代游戏机的存储系统面临着多重挑战,从监管合规到性能优化,每个环节都需要精心设计。作为游戏机硬件架构中最关键的组成部分之一,存储方案的选择直接影响着设备的可靠性、安全性和用户体验。1.1 监管合规性要…...

实战应用:在快马平台构建集成imToken的简易DeFi兑换应用前端

最近在做一个DeFi相关的项目,需要集成imToken钱包功能来实现代币兑换和流动性查询。正好发现InsCode(快马)平台可以快速搭建这样的应用,整个过程比想象中顺利很多,记录下实现思路和关键点。 项目整体架构设计 这个简易去中心化交易所前端主…...

LoRaWAN牲畜追踪方案:低功耗物联网在畜牧业的应用实践

1. 项目概述:基于LoRaWAN的牲畜追踪方案实践去年在泰国北部的一个牧场考察时,我亲眼目睹了当地牧民每天花费数小时徒步寻找散养牛群的场景。这种传统的人工追踪方式不仅效率低下,还经常因突发天气导致牲畜走失。正是这次经历让我开始关注低功…...

VITS+LLM本地部署:打造低延迟、个性化AI数字人语音交互系统

1. 项目概述:当VITS语音合成遇上AI数字人最近在捣鼓AI数字人直播和内容创作的朋友,可能都绕不开一个核心需求:如何让虚拟形象拥有一副既自然、又有个性,还能实时交互的“好嗓子”。传统的TTS(文本转语音)方…...