news 2026/11/6 3:49:14

【C++】C++与C的一些区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++】C++与C的一些区别

在C语言的基础上,C++新增了很多新特性。本篇博客主要介绍一些C++新增的常用的新特性。

1.输入输出(cin/cout)

在C语言中,我们通常会用scanf/printf进行输入输出。但用这两个库函数,我们需要记住像%d %s %f等等的占位符,输入输出会显得有些麻烦,而且占位符的类型还不能错。
于是C++引入了cin/cout。这么输入输出,就不用担心类型,编译器会识别。
下面是代码示例:

#include<iostream>usingnamespacestd;intmain(){cout<<"hello world"<<endl;cout<<123<<endl;cout<<1.23<<endl;intnum;cin>>num;cout<<num<<endl;return0;}


我们不难发现,cin/cout支持任意类型的输入输出,一步到位,这是C语言不具备的且好用的特性。
在使用cin/cout时,我们要注意包<iostream>。

2.namespace(命名空间)

在C语言,我们对变量名,函数名的命名可能会与标准库重名,或者在工程过大的时候,命名也可能会出现重名。比如:

#include<stdlib.h>intrand=10;intmain(){//编译报错:errorC2365:“rand”:重定义;以前的定义是“函数”​printf("%d\n",rand);return0;}

C++引入了一个namespace命名空间新特性,避免命名的冲突。

namespaceliwa{inttest=30;}inttest=20;intmain(){inttest=10;//默认拿到局部的testcout<<test<<endl;//::前为空则拿到全局的testcout<<::test<<endl;//::前指定命名空间,此处拿到liwa的testcout<<liwa::test<<endl;return0;}


在使用过程中我们会发现,有些函数/变量会被频繁使用,但是每次使用都用::会很麻烦
我们可以
1.using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。​
2.展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

//直接展开命名空间usingnamespacestd;//部分展开命名空间usingstd::cout;usingstd::cin;

3.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。
下面用全缺省做示例:

intadd(intx=10,inty=20){returnx+y;}intmain(){cout<<add()<<endl;cout<<add(20)<<endl;cout<<add(30,30)<<endl;return0;}


注意:当函数有缺省参数时,实参必须从左到右给,不能跳跃。缺省参数必须是从右往左连续缺省,也不能跳跃。函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

4.函数重载

C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。

intadd(intx=10,inty=20){returnx+y;}doubleadd(doublex,doubley){returnx+y;}intmain(){cout<<add(30,30)<<endl;cout<<add(1.5,2.6)<<endl;return0;}


编译器识别函数是否为重载函数只看函数的参数,与返回值无关,所以不能定义一个只有返回值不同的重载函数。其次,有缺省参数和无缺省参数的函数也不能构成重载。

5.引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
类型&引用别名=引用对象;​

intmain(){inta=10;//b是a的别名int&b=a;//c是b的别名,也相当于是a的别名int&c=b;//d是a的别名int&d=a;cout<<&a<<endl;cout<<&b<<endl;cout<<&c<<endl;cout<<&d<<endl;return0;}


运行可以发现,abcd的地址是一样的,即共用一块内存空间。
注意:
1、引用在定义时必须初始化
2、一个变量可以有多个引用
3、引用一旦引用一个实体,再不能引用其他实体

5.inline

用inline修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数,这样调用内联函数就不需要建立栈帧了,就可以提高效率。
下面是用法:

inlineintsub(intx=20,inty=10){returnx-y;}intmain(){cout<<sub()<<endl;return0;}

inline对于编译器而言只是一个建议。inline适用于频繁调用的短小函数,对于递归函数,代码相对多一些的函数,加上inline会被编译器忽略。​
inline不建议声明和定义分离到两个文件,可能会导致链接错误。

6.nullptr

在C语言,我们用NULL表示空指针。NULL实际是一个宏,在C++中定义为整型0,在C中定义为无类型空指针(void*)0。
在C++,如果一个函数的参数是指针,我们传NULL就会变成传整型,类型不匹配,即使传(void*)NULL编译器也会报错,和C语言不同,void*和其他类型的指针类型不匹配。
所以C++引入一个nullptr关键字,这个nullptr代表空指针,并且可以自动转换类型,与参数适配。
举个例子:

voidf(int*pi){cout<<"f(int*)"<<endl;}voidf(inti){cout<<"f(int)"<<endl;}intmain(){f(NULL);f(nullptr);return0;}

以上就是C++在C上新增的一些特性,希望对大家有帮助。

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

数据放在系统里到底安不安全?老板只需要问软件商这 3 个问题

上周去见一个客户&#xff0c;聊到最后&#xff0c;老板突然压低声音问我&#xff1a;“我把客户资料、进货价、欠款这些&#xff0c;都放你们系统里&#xff0c;安全吗&#xff1f;” 我跟他说&#xff0c;这个问题问得太好了。敢问这句的老板都是清醒的&#xff0c;反而是大部…

作者头像 李华
网站建设 2026/11/6 3:48:13

第六篇:《Consumer 深度实战:位移提交、再平衡与消费组协调》

在上一篇文章中&#xff0c;我们通过 acksall、幂等性生产者和事务消息&#xff0c;构建了数据写入端的可靠性。但写入可靠不等于消费可靠。Consumer 面临的问题完全不同&#xff1a;它需要跟踪“我消费到了哪里”&#xff0c;而这个跟踪机制&#xff08;位移提交&#xff09;的…

作者头像 李华
网站建设 2026/11/6 3:48:13

如何跳出传统开发的困境?比特鹰助你成为 AI 架构师

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:48:08

论文里的机器学习方法怎么写:数据、模型与结果的交代

模型跑通、指标也过了线&#xff0c;真正难的是落笔&#xff1a;方法一章到底该交代到哪一层。写少了&#xff0c;审稿意见里一句「数据如何划分」就能把稿子挡回来&#xff1b;写多了&#xff0c;又像把代码日志贴进正文。机器学习的可复现性&#xff0c;几乎全部压在方法章的…

作者头像 李华
网站建设 2026/11/6 3:47:20

Android EventBus 入门:原理、使用与常见踩坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:46:43

光纤色序检测仪 毫秒节拍的轻量化实现

1. 生产痛点 在光通信布线、跳线生产和光缆组件装配环节&#xff0c;光纤&#xff08;或尾纤、跳线&#xff09;的色序是保证链路可维护性的基础约定。行业通用的 12 色序为&#xff1a;蓝、橙、绿、棕、灰、白、红、黑、黄、紫、粉、青&#xff0c;按松套管或束管内的位置依次…

作者头像 李华