C++相比于C语言增加的8个小特性(详解)

这篇具有很好参考价值的文章主要介绍了C++相比于C语言增加的8个小特性(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++相比于C语言增加的8个小特性(详解)



一、命名空间

c++的命名空间是为了弥补C语言的坑,比如我们定义一个变量:rand,就会出现以下问题!
C++相比于C语言增加的8个小特性(详解)
c++调整这一缺点,来进行调整,引用了关键字:namespace

使用方式如下(示例):

#include<stdio.h>
#include<stdlib.h>
namespace ming
{
	int rand = 0;
}
int main()
{
	printf("%p\n", rand);
	printf("%p\n", ming::rand);
	return 0;
}

命名空间定义和使用
C++相比于C语言增加的8个小特性(详解)
1.命名空间里面也可以嵌套使用
2.如果在同一个工程中,命名空间名字相同,则编译器自动合成为同一个命名空间。
如果想方便一点,可以直接 using namespace std 直接声明即可!
3.项目中,尽量不要使用using namespace std
4.日常练习用using namespace std
5.项目和指定命名空间访问+展开常用


二、C++输入和输出

由于C语言中scanf 和 printf 需要指明数据输入输出的类型,较麻烦,C++引入了cin 和 cout
C++的 cin 和 cout 优点:可以自动识别类型
C++相比于C语言增加的8个小特性(详解)
如果要控制浮点数的宽度和小数点后的位数,就可以直接用C语言的scanf(C++兼容C语言


三、缺省参数

缺省参数相当于一个备胎,在函数传参时,如果没有参数就用缺省参数,有参数时,就不用缺省参数!
C++相比于C语言增加的8个小特性(详解)


如果有多个参数需要传参时,遵循从左往右传参原则~!
C++相比于C语言增加的8个小特性(详解)


以下为半缺省,半缺省默认传参为第一个,此时不可以不传参数!原则:从右往左连续缺省,不能间隔
C++相比于C语言增加的8个小特性(详解)


缺省参数在实际中的应用为在一些数据结构中初始化一些数组时,不知道capacity大小而出现的问题~
C++相比于C语言增加的8个小特性(详解)


四、函数重载

在C语言中我们是不允许一个同名函数定义不同的功能而C++弥补了这一缺点,引入了函数重载
C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
C++相比于C语言增加的8个小特性(详解)


C++相比于C语言增加的8个小特性(详解)


为什么C++支持函数重载,而C语言不支持函数重载呢?–》C++支持函数重载的原理–名字修饰
原理C++在链接中是用修饰过的名字去找,函数名相同就能找到,C语言直接通过函数名去找,在编译中函数名相同,编译出来生成符号表都去分不出来,所以C++可以函数重载,而C语言不能函数重载


C语言如何调用C++的库,C++如何调用C语言的库?–》 这里引用了 extren ‘C’

C++调用C语言库代码 :如下(示例):

// C++ 调用 C语言 的库
extern "C"
{
     #include<Stack.h>
}

extern “C”告诉C++的编译器,这里面的这些函数是C的库实现的,你用C的规则去链接查找他们!


C语言调用C++库代码 :如下(示例):

// C语言 调用 C++ 的库
#ifdef _cplusplus

extern "C"
{
#endif // _cplusplus
	void StackInit(ST* ps);
	// ....
#ifdef // _cplusplus
}
#endif // _cplusplus

五、引用

引用特性
1.引用在定义时必须初始化!
C++相比于C语言增加的8个小特性(详解)

2.一个变量可以有多个引用!
C++相比于C语言增加的8个小特性(详解)

3.引用一旦引用一个实体,再不能引用其他实体!
C++相比于C语言增加的8个小特性(详解)


引用的使用场景
1、做参数- -a.输出型参数;b.大对象传参提高效率
在交换函数中就很好地体现这一点!
C++相比于C语言增加的8个小特性(详解)
而我们在定义某些数据结构时,运用引用也很方便!

代码如下(示例):

void SLPushBack(SL& s , int x)
{}

2、做返回值- -a.输出型返回对象,调用者可以修改返回对象;b.减少拷贝,提高效率
C++相比于C语言增加的8个小特性(详解)
为什么传引用返回比传值返回快呢?


C++相比于C语言增加的8个小特性(详解)


C++相比于C语言增加的8个小特性(详解)结论:上面的程序使用引用返回本质是不对的,结果是没有保障的!

C++相比于C语言增加的8个小特性(详解)

下面这个场景,才会使用传引用返回 :如下(示例):

int& Count()
{
	static int n = 0;
	n++;
	//......
	return n;
}
int main()
{
	int& ret = Count();
	cout << ret << endl;
	cout << ret << endl;
	return 0;
}

传引用返回的实例:
我们在写动态顺序表中的 改top位置的数据时,会用到 查找函数+修改函数,很麻烦!所以我们用传引用来优化一下

原来的修改top位置的数据代码: 如下(示例):

// 顺序表中在指定位置插入一个数据
void SeqListInsert(SeqList* ps, int pos, SLDataType x)
{
	assert(pos <= ps->size && pos >= 0);
	SeqLisrCheckCapacity(ps);
	int end = ps->size - 1;
	while (end >= pos)
	{
		ps->a[end + 1] = ps->a[end];
		end--;
	}
	ps->a[pos] = x;
	ps->size++;
}

现在传引用返回中 的修改top位置的数据代码: 如下(示例):

// 顺序表中在指定位置插入一个数据
int& SLAt(SL& s, int pos)
{
	assert(pos >= 0 && pos <= s.size);
	return s.a[pos];
}

C++相比于C语言增加的8个小特性(详解)


需要注意的一点是:运用引用的时候,权限不能放大,但是权限可以缩小!
C++相比于C语言增加的8个小特性(详解)


如果引用会改变类型,也要加const防止权限扩大!
C++相比于C语言增加的8个小特性(详解)


函数传参的时候也要注意:
C++相比于C语言增加的8个小特性(详解)


引用和指针的不同点:
指针和引用用途基本是相似的,在这里我们从两个方面去区分二者:1.使用场景;2.语法特性及底层原理。

1. 引用在定义时必须初始化,指针没有要求
2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
3. 没有NULL引用,但有NULL指针
4.sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)
5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
6. 有多级指针,但是没有多级引用
7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全

C++相比于C语言增加的8个小特性(详解)


六、内联函数

在之前学过的堆排序和快速排序中,如果排序10w数据,就会调用很多次swap函数,就会有很多函数压栈的开销。
短小的函数(1~10行)、频繁的调用(10万次)为了解决这一现象,C语言引入了宏函数;C++引入了inline内联函数!

可是C++的创建者又发现C语言中的宏很不方便,具体优缺点如下:

宏的优点:a.复用性变强、b.宏函数提高效率,减少栈帧建立
宏的缺点:a.可读性差;b.没有类型的安全检查;c.不方便调试

C++相比于C语言增加的8个小特性(详解)


C++引入了内联函数,在函数前加inline,在main函数调用的时候就会有选择性地展开!
C++相比于C语言增加的8个小特性(详解)


如果函数调用次数过多,编译器就会选择不展开!
C++相比于C语言增加的8个小特性(详解)
C++相比于C语言增加的8个小特性(详解)

inline的特性 :如下(示例):

1.inline是一种以空间换时间的做法,省去函数栈帧额外开销。所以代码很长或者有循环/递归的函数不适宜使用内联函数。
2.inline对于编译器而言只是一个建议,编译器会自动优化。如果定义为inline的函数体内有函数内部实现代码指令长度比较长
  (10行左右,不同编译器不同)/递归等,编译器优化时会忽略掉内联。
3.inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,链接就会找不到。

七、auto关键字

auto对于我们目前来说简单理解,后面学习会不断完善。
我们目前运用auto关键字可以:1.使用auto来遍历数组! 2.类型比较长时,auto自动推导

1.auto遍历数组方式 : 如下(示例):

// auto遍历数组
int main()
{
	// 旧版的遍历a数组 low
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;

	// 运用范围for(auto关键字)自动依次取a的数据,赋值给e
	for (auto e : a)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

2.当类型比较长的时候,auto会自动推导!
C++相比于C语言增加的8个小特性(详解)


这里要注意:auto自动识别的是数据类型,可以用来强调传参!
C++相比于C语言增加的8个小特性(详解)


八、指针空值nullptr

C语言中空指针NULL为0,这样就会有些问题!
C++相比于C语言增加的8个小特性(详解)
这里就会把NULL误认为是0,也就是int类型,C++之父为了解决这个问题,引入了nullptr关键字
C++相比于C语言增加的8个小特性(详解)


总结

以上就是今天要讲的内容,本文简单介绍了C++相比于C语言新增的一些特性。缺省参数、函数重载、引用等特性!
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
C++相比于C语言增加的8个小特性(详解)文章来源地址https://www.toymoban.com/news/detail-436175.html

到了这里,关于C++相比于C语言增加的8个小特性(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “C++基础入门指南:了解语言特性和基本语法”

    C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助 工作之后,看谁的技术牛不牛逼,不用看谁写出多牛逼的代码,就代码风格扫一眼,立刻就能看出来是正规军还是野生的程序员。代码的风

    2024年02月16日
    浏览(38)
  • C++ Primer 6.5 特殊用途语言特性 6.6 函数匹配 知识点+练习题

    在给定的作用域中一个形参只能被赋予一次默认实参 局部变量不能作为默认实参,函数结束就销毁,无法当作默认实参。 除此之外,只要表达式的类型可转换成形参所需要的类型,则可以作为默认实参 将函数定义为内联函数,即加上inline,在编译时内联展开代替函数 在编译

    2024年01月22日
    浏览(46)
  • C++中size_t类型详解:探究其特性与用途,附带源代码示例

    C++中size_t类型详解:探究其特性与用途,附带源代码示例 在C++编程语言中,\\\"size_t\\\"是一个常见的数据类型,用于表示内存大小或对象大小。在本文中,我们将深入了解size_t类型的特性和用途,并提供相应的源代码示例。 一、size_t类型概述 size_t是C/C++中定义的一个无符号整数类

    2024年02月06日
    浏览(39)
  • Oracle 19c 新特性|增加 VARCHAR2 数据类型的大小限制

    作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT) 如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA) 大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来学习 Oracle 19c 新特性,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到

    2024年02月03日
    浏览(39)
  • C++语言基础——函数(详解)

    目录 函数是什么 函数的定义 主函数举例  空函数 函数的调用 语法格式 举例说明:计算x的n次方 递归 递归的主要点 递归的结构 条件 递归使用的场景 函数全名叫 计算机函数 ,它可以帮助你完成一些特定的程序。你可以把它简单理解成一把手枪。 手枪的作用: 完成几发子

    2024年01月21日
    浏览(56)
  • 【C语言趣味教程】(10) 分支语句 Ⅱ:switch 语句 | fall-through 效应 | default 子句 | else 特性详解 | else 匹配原则 | 悬空 else 隐患

        🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 switch 的语法 📚 介绍: switch 语句是一种多分支语句,常常用于 \\\"多分支\\\" 的情况。 用于不同条件执行不同动作,每一个 case 分支都是唯一的,从上往下逐一测试直到匹配为止。 一个标准的 switch 语句由三部分组成: case

    2024年02月03日
    浏览(52)
  • ES6、ES7、ES8、ES9、ES10、ES11、ES12都增加了哪些新特性?

    前端开发的都知道,JavaScript经历了不同标本的迭代,从1到12的不断完善中会添加不同的新特性来解决前一个阶段的瑕疵,让我们开发更加便捷与写法更加简洁! 我记得我第一次接触js的时候是从大学的《21天精通JavaScript》,名字很好听,但是现在还在学,还没有精通!哈哈哈

    2024年02月16日
    浏览(39)
  • Qt C++ 在windows上三目运算不断增加内存

    今天在做摄像头项目的时候,运行程序很卡 打开任务管理器发现程序内存一直在增加 函数内部无任何的 new 和 malloc操作 最后在nv12转rgb像素转换函数发现是因为三目运算导致内存不断增长 最后替换了if 解决了这个问题 由于平时测试的摄像头分辨率都比较低,所以这个问题不

    2024年02月14日
    浏览(87)
  • 没学C++,如何从C语言丝滑过度到python【python基础万字详解】

    大家好,我是纪宁。 文章将从C语言出发,深入介绍python的基础知识,也包括很多python的新增知识点详解。 思维导图: 在C语言中,在进行输入输出的时候,通常要遵循一定的格式,如变量名必须与变量的类型严格对应,输出输入的每一个变量都要在数量和格式上都要一一对

    2024年02月12日
    浏览(42)
  • 【干货】Android系统定制基础篇:第十四部分(禁止第三方应用调用系统设置、增加TP配置、增加摄像头镜像设置、增加摄像头默认角度设置、修改默认语言)

    修改文件 frameworksbasecorejavaandroidappActivityManagerNative.java 如下: 属性配置: Android 主板定制过程中经常出现客户需要临时适配各种 TP(包括 USB TP),因此在设置菜单中加入 xy 交换,x 反转,y 反转常用配置,以客户多样性需求。 以下修改基于Android 8.1 SDK,如下: 属性配置

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包