C++入门详解

C/C++新手入门项目合集:GitHub资源库0voice/introduce_c-cpp_manual详解 C/C++作为系统级编程语言,其核心价值在于对计算机底层原理的深入理解和高效控制。从内存管理、指针操作到数据结构与算法,掌握这些基础概念是构建高性能应用的关键。在工程实践中,理论学习之后往往面临“如何将知识转化为实际项目”的痛点。开源社区为此提供了丰富的练手资源,其中GitHub上的项目合集成为开发者从入门到进阶的重要桥梁。这些资源覆盖了网络编程、并发处理、图形界面等核心应用场景,通过阅读和修改真实代码,能够有效提升工程思维和调试能力。本文聚焦的 `0voice/introduce_c-cpp_manual 阅读详情

1.命名空间

在C语言中,我们无法解决命名冲突的情况,相同的命名会导致很多冲突,C++中的命名空间就是为了解决这一问题而存在的。命名空间可以对我们所取变量名,也就是标识进行本地化,限制其使用的范围,避免命名的冲突。

1.1命名空间的定义 

命名空间的定义基本语法是使用关键字:namespace 后接要取的命名空间的名字,在加上一对{},在{}中的成员我们为命名空间的成员,在命名空间中我们可以定义变量、函数、类型等。

例如:

此外,命名空间也是可以嵌套使用的,并且在一个工程中,命名空间的名称可以相同,最后在编译的时候,多个名称相同的命名空间将会合并为一个。

1.2命名空间的使用

了解了命名空间的定义,我们就可以来使用命名空间中得定义的成员了,正常情况下,在命名空间中被定义的量无法被使用,命名空间中成员的使用是受到限制的,例如以下对命名空间N中成员a的使用,编译器将会报错,显示a为未定义,这就是由于命名空间限制了变量a被发现使用。

要使用,命名空间中某一定义的量时,我们有三种方法。

1.21直接使用,不引用

对于直接使用,不对命名空间进行引用时,这种方法在使用命名空间中的成员时,需要在对应的命名空间配合域作用限定符 :: 使用,但是每次使用该命名空间中的成员时都要如此,如对上面命名空间N中成员a和b的使用

1.22对命名空间中某一个成员的引用

 对于对命名空间中某一个成员的引用,其方法是利用using配合命名空间及域作用限定符对应某一成员引用,在之后对该成员的使用就可以直接使用,但需要注意的是,只有命名空间中被引用的成员才可以直接使用,其他未被引用的成员无法直接使用。

1.23对整个命名空间的引用

对于整个命名空间的引用,其方法是使用using配合namespace加上要引用的命名空间的名称,该方法引用了整个命名空间,命名空间中定义的成员此时均可直接使用。

2.C++的输入和输出

要使用C++中的输入输出,与C语言中所需要引用的头文件不同,C++中应当包含的头文件为:<iostream>,此外同时需要对C++中的标准命名空间std 进行引用,C++将标准库的定义实现都放到这个命名空间中,在使用时我们先需要对其引用。

2.1输入&输出 

C++的输入是依靠标准输入对象cin配合流提取运算符 >> 来实现的,输出是依靠标准输入对象cout配合流插入运算符 << 来实现的,在引用C++中的成员cin、cou时,我们同样可以单独只引用cin、cout也可以直接引用标准命名空间std。此外C++标准命名空间中有单独作为换行的符号endl(end line的缩写),可以更加方便的换行,同时C语言中的换行符"\n"也可以使用。

与C语言中的输入输出不同的是,C++中的标准输入输出能够自动识别变量的类型,对与输入与输出更加的方便。

3.缺省参数

缺省参数是一个在声明或者定义函数时使用的手段,但不能用于C语言中使用,其作用是当调用函数时,如果传递的参数数量不足或者没有传递参数时,给参数设置默认的一个值,缺省参数分为两种情况,一种为半缺省参数,另一种为全缺省参数。需要注意的是,缺省参数在函数的声明和定义中只能有一个给缺省值,如果是在多个文件下,则一定是函数声明那个文件给缺省值,而定义函数的文件不能给上缺省值。

3.1全缺省参数

顾名思义,全缺省参数是给函数参数的每一个参数都设置一个默认值,当调用函数时传递的参数不足或不传参数时,将没有传递参的参数的值赋值为缺省值。例如:

当调用函数不传或者少传参数时,左右往右依次传递对应参数,未传递参值的参数使用缺省默认值。

3.2半缺省参数

半缺省参数与全缺省参数不同,在设置参数的缺省值时没有给所有的参数都设置缺省值,只给了部分参数设置缺省值,这个部分被设置缺省参数的个数并不为函数总参数的一半,此外特别需要注意的是,半缺省参数在给参数设置缺省值时必须是从右往左而且连续设置的。这是因为如果不以这种方式设置缺省值,当调用函数传递部分参数时,不能确定该参数为传递到哪个参数。

可以看到,半缺省参数的参数传递实际上与全缺省参数调用起来其实是差不多的,传参都是从左往右传递给对应的参数,第一个值传递给函数左边第一个参数,第二个传递给函数左边第二个,依次如此,与全缺省参数不同的是,半缺省参数的函数在调用时一定要传递参数,传参数个数至少为没有设置缺省值参数的个数。

4.函数重载

函数和重载是C++中一种允许在同一作用域下可以声明定义具有相同函数名的多个函数的情况,用于实现几个功能相似的函数,这些函数的函数名称是相同的,但是参数不同。构成重载函数需要满足两个条件:函数名相同以及函数的参数不同,与函数的返回值的相同与否无关。其中函数名的相同这点应该没有太大问题,主要是函数参数额不同可能会有问题。函数参数的不同又分为两种情况,一是函数参数个数不同,另一个是函数参数类型不同,下面就说明这两种情况。

4.1函数参数个数不同

关于函数参数的个数不同构成的函数重载,我们应该也不难理解,两个函数的参数个数不同,构成重载函数,此外,重载函数中同样可以使用缺省参数,为参数设置默认缺省值,但是需要我们注意的是,如过重载函数都为全缺省参数时,虽然函数能构成重载函数,但是如果在调用函数不传递参数是,在使用上则会产生歧义,编译器不知道调用哪个函数。

4.2函数的参数类型不同

函数参数类型的不同也能够构成多个重载函数,参数类型的不同,多个重载函数中,每个函数之间的参数类型都不完全相同即可,而对于缺省参数的使用,同样与前面函数参数个数不同一样,当多个重载函数为全部缺省参数时,调用重载函数将会出现歧义。

5.引用

C++中的引用是给一个量取别名的操作,引用不会开辟新的空间,引用取的别名所指向的空间与它所引用的量的空间是相同的。

5.1引用的使用

引用的使用是通过类型&加上引用后取的别名来实现的,其中类型&在这里不再是指代取地址的操作,引用的类型与被引用的量的类型一是相同的,且引用操作是一定要进行初始化的。

5.11直接引用、常引用

引用可用于直接为一个变量定义一个别名,一个变量可以有多个引用取的别名,它们所指向的都是引用的对象,当别名的值发生改变时,被引用的对象的值发生同样改变。常引用用于引用含有const修饰的变量或者不可改变的常量,在使用时不能扩大其使用的权限,但可以缩小引用对象的权限。

 例如变量a是被const所修饰的常变量,不可修改其大小,如过在引用a时,直接引用则变相扩大了a的使用权限,也就是使用别名对a的值可以进行修改,如此定义编译器将会报错,无法运行,对于常b也是同理,而变量c原本没有被const所修饰,但是在引用c的时候加上了const对别名进行修饰,缩小了别名使用的权限,使得通过别名不能对c进行修改。

5.12作函数参数、返回值

当引用作为函数参数时,可以使得改变形参引起对实参的改变,函数将传递的参数视为实参的别名。

 引用作函数返回值时,可以接收函数中定义的量,如函数中定义的静态变量被作为返回值接收得到的是该变量的别名。

5.13引用的优点以及和指针的区别

相同点:在函数参数使用引用进行传递参数比使用值拷贝传递的效率更高,此外,使用引用传递的参数可以对实参进行修改,而值传递不行,这点与指针有着相似之处。

不同点:不同点其一在于引用是不需要额外开辟空间的,引用所指向的空间与被引用的量的地址是相同的,而指针的是需要额外开辟空间来存储的;其二,引用的使用是一定需要进行初始化的,不同于指针的定义可以在定义时置空,引用在定义时一定是要有引用的对象的,不存在空引用这种操作;其三,引用在定义之后,所指向的对象是不可变的,不同与指针,指针所指向的对象是可以改变的。

6.内联函数

内联函数是一个被 inline 所修饰的函数,只要在函数名的前面加上inline就是一个内联函数。如下面一个简单的内联函数。

6.1优缺点

 内联函数与其它函数相比,它在被调用时会在被调用的地方展开,不需要建立函数栈帧,没有调用建立栈帧率的开销,调用时更加高效。

但是内联函数是一个用空间换时间的做法,虽然能够优化程序的运行效率,但同时也会增大目标文件的空间大小,此外,内联函数不是在函数前面加上inline就能够使用内联函数的方式运行的,内联函数一半只能针对少量代码的函数运行使用,在函数前面加上inline所起到的作用是建议使用内联函数,是否使用取决于编译器。

7.关键字auto的使用

C++中的关键字auto是一个具有自动识别变量类型的关键字,修饰变量是可识别变量的类型,也可用于定义变量,下面让我们来了解一下关键词auto。

7.1定义变量

auto可用于直接定义一个变量,但在定义变量时是需要进行初始化的,因为由auto定义的变量,实际上在编译器编译的时候就已经将auto替换为所定义变量的实际类型了。

当使用auto一次定义多个变量时,这些变量的类型必须时相同的,否则,这与编译器在编译时将auto替换为修饰变量的对应内型相联系。

7.2auto与指针、引用

auto也可以用于声明定义一个指针变量,但使用auto*与auto所定义的指针变量类型是一致的,但是在使用auto声明定义引用的时候是一定需要加上&符号的,否则无法识别为引用。

7.3auto与范围for

auto的另一个作用是与范围for一起使用,而范围for是基于一个有范围的集合进行for循环遍历的操作,相对于传统的for循环,范围for的循环遍历不需要指定集合的范围就可以依次自动遍历该集合的全部元素。for循环后的括号由冒号“ :”分为两部分:第一部分是范 围内用于迭代的变量,第二部分则表示被迭代的范围。

如上图范围for依次将数组中的元素赋值给变量e,遍历打印数组a中的全部元素。

7.4auto的使用局限

auto并不能完全代替变量类型的声明定义,在函数的参数的类型定义,auto就不能够使用,以及对于数组的定义,auto同样也无法使用。

8.空指针nullptr

在C语言中,我们常常使用NULL来表示空指针,但实际上,C语言中的空指针是由宏定义而来的,NULL被使用宏定义为数字0,在某些问题中使用NULL来表示空指针会产生一些意想不到的麻烦,当我们使用cout打印NUL也会发现,NULL被识别为数字0。

而为了解决空指针这一缺陷的缺陷, C++中则引入了nullptr来表示空指针,在以后的空指针的表示中,我们也最好使用nullptr来表示。


结语

作为新的知识的开始,C++的入门相关知识就介绍到这里了,今后也会带来过多有关C++的知识,如果感觉对你有帮助的话还请点个赞支持一下!有不对或者需要改正的地方还请指正,感谢各位的观看。

C++入门(图文详解) C++从数据、函数、宏、指针、面向对象等出发详细讲解 阅读详情

相关推荐

三. zemax光学设计流程+案例

文章目录zemax 基本操作:1. 建立光学基本模型2. 像质评价3. 优化(重点)4. 公差分析简单镜头设计 zemax 基本操作: 1. 建立光学基本模型 2. 像质评价 3. 优化(重点) 对系统设定的约束条件或目标值 统称为操作数。 操作数: 光学特性参数(焦距EFFL,近轴放大率PMAG,入瞳位置EMPP) 像差参数(球差SPHA,彗差COMA,像散ASTI) 边界条件(中心厚度值CTVA,边缘厚度值ETAV) 优化的主要步骤: 设置评价函数和优化操作数 一般小像差系统采用波像差 构建

Taiiiii的博客 8055

C++同名函数选择,命名空间

同名函数的选择 同名函数的情况,可以出现于函数重载或者有模板函数的情况下,弄清各个函数的调用优先级以及报错的情况有必要 void may(int); float may(float, float y=3); void may(char); char * may(const cahr &amp; ); template&lt;class T&gt; void may(const ...

学习自由 1474

Element-cascader级联选择器增加全选功能

element el-cascader

weixin_44384273的博客 3728

【C++】命名冲突了怎么办?命名空间来解决你的烦恼!!!C++不同于C的命名方式——带你认识C++的命名空间

【C++】C++学习篇(1)——命名空间 详细介绍C++中的命名空间,并深度剖析使用命名空间需要注意的三个方面……

蒙奇D索大的博客 1757

SurfaceControlViewHost使用介绍

可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。

chadm.xiang 1289

瑞萨 RL78 开发环境实战:从 CS+ for CC 到 e² studio 高效开发

本文详细介绍了瑞萨RL78单片机开发环境的选择与配置,对比分析了CS+ for CC和e² studio的特点及适用场景。内容涵盖环境安装、工程创建、调试技巧、外设驱动开发和低功耗设计等实战经验,为开发者提供全面的RL78入门指南,帮助快速上手并高效开发。

4k5l6j7h8的博客 242

C++命名空间 namesapce

最近在使用命名空间,想把命名空间总结下,现在只是简单的记录下使用的心得,后期会进行进一步的整理 1.就是我们是把我们的.cpp文件和.h文件都使用相同的命名空间,如果不这样做 ,会可能出现下列问题。 1.1 只在头文件中使用,那么要包含头文件,使用头文件里声明的类或者方法时,要using namespace ... 而在.cpp中没有使用 ,起不到保护的作用。 1.2只在cpp中使用,那.........

zhc的博客 608

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

c++如何读取YAML格式配置文件_yaml-cpp库快速入门【详解】

()

2302_77998218的博客 318

Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)

摘要 本文介绍了基于Spring Boot 3.2和Spring AI 1.0.0-M4构建智能客服系统的技术方案。系统采用分层架构设计,集成DeepSeek API提供自然语言处理能力,使用MyBatis和H2数据库实现数据持久化,并通过Thymeleaf+Bootstrap构建前端界面。文章详细阐述了项目的技术栈选择、Maven依赖配置、应用架构设计,以及各模块的功能划分,为开发者提供了完整的智能客服系统实现方案,涵盖从后端服务到前端交互的全流程开发指导。

博客 3848

使用ClickHouse JDBC官方驱动,踩坑无数

这个问题我在网上查原因说是由于Zookeeper压力过大,表变成只读状态,导致ClickHouse插入数据失败。写入数据频率过高。Zookeeper中的集群节点挂掉。而我们项目出现这个问题的原因是第一个:写入数据频率过高。但是在网上搜资料的过程中,我又发现了另外一个问题:我们项目用了JDBC驱动,但ClickHouse官方并不推荐。。证实了官网确实不建议使用驱动:而应该改成驱动,并且推荐使用0.3.2以上的版本:于是,后面几天开始了ClickHouse的JDBC驱动升级之旅。

2万+

Dev-C++/Cpp使用入门详解

Dev-C++是一个可视化集成开发环境,使用Dev可以完成C语言,C++程序的编辑、预处理/编译/链接、运行和调试。 因其体积小巧,编译简单,对初学者十分友好,所以我们来简单的讲解下如何安装以及使用。 安装 1.双击安装包,就可以开始安装,这里语言先选择English,安装完成之后会有简体中文选项。 2.否同意软件的许可协议,I Agree同意就行 3.选择需要安装的组件,直接默认就行,点击Next 4. 选择安装路径,点击Next 5.安装完成,点击Finish 第一次打开之后会让你选择语言,

Z小旋 5万+

ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting `torch.set解决方案

本文主要介绍了ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting 'torch.set_default_device(device)` requires `accelerate`解决方案,希望能对使用transformers的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 3万+

【C++指南】vector(一):从入门到详解

std::vector 是 C++ STL 中最核心的动态数组容器,支持高效随机访问和动态扩容。本文从 基础用法 和 深度优化 两个维度,系统解析其构造函数、迭代器、容量管理、元素访问和修改操作,涵盖函数重载、参数差异及相似函数对比,并提供丰富的代码示例

倔强的石头的博客 4326

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ 入门超详解!

c++入门超详解!!!

代码铺子 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++入门(详解)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。//这里注意test是这个命名空间域的名字//这里的名字最好带有区分意义,因为以后大家做大型项目的时候,这个名字能帮助你和别人区分这是谁写的代码。//1.命名空间域的定义//命名空间域中可以定义类型,变量,函数,结构体等等int val;//2.命名空间可以嵌套int a = 1;int b = 2;int c = 3;int d = 4;

hy____123的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【C++】C++入门知识详解(下)

我们接着来介绍另一些C++入门基础知识。

2402_82757055的博客 1130

【C++】:C++11详解 —— 入门基础

C++11(原称 C++0x)是 C++ 编程语言的第三个国际标准(ISO/IEC 14882:2011),于 2011 年 8 月正式发布。它是自 1998 年 C++98 标准后的首次重大更新,引入了大量新特性,旨在提高代码效率、简化开发流程并支持现代编程范式。C++11 被广泛认为是 C++ 的“现代化重生”,推动了语言向更高抽象层级、更安全的资源管理和更强大的并发支持发展。 C++11 的起源 应对现代编程挑战 C++03(2003 年小修订版)后,开发者逐渐发现语言在并发编程、泛型编程和资源管

元清的博客 1182

【C++详解】入门C++

新学期新气象,恭喜你一路过五关斩六将来到这里,C++是一门经久不衰的语言,上可游戏开发,下可操作系统开发。就连与人工智能连接紧密的python背后的深度学习核心的算法还是C++写的。作为一名老牌语言的常青树,C++一直霸占编程语言前5名。当然它也是难以驾驭的,因此, 你,准备好了吗?

HinsCoder的博客 823

C++入门基础详解

C到C++的无痛过度(C++入门基础篇)

2601_96557346的博客 577

【C++基础回顾】基础入门和核心语法(万字详解!!!)

C++基本入门语法,包含引用、运算符重载、封装继承多态等知识,内含测试源码

2201_75475240的博客 982

【C++】入门之域的详解

域的分类 域的定义和初步理解 域的深入理解即认识 命名空间域的嵌套 命名空间域嵌套的作用(命名空间嵌套可以解决什么问题?)

2303_80737493的博客 1143
上一篇: 常见八大排序
下一篇: 初识类和对象
爱摸鱼的阿Q
博客等级 码龄4年 165粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值