概述
1.1.引入了命名空间的概念(namespace)与作用域限定符(::)
C语言对于不同开发者在合作开发项目时,不同文件最终结合链接为最终项目时,不同文件里的同名变量可能产生冲突的问题[一般是报错重复定义]采用的解决方案是使用static关键字,即将该变量的作用范围限制在本文件内使用,但是这样也会导致部分代码的可复用性变差,在外部无法调用,因此C++引入命名空间概念,为了使用不同命名空间的成员,也引入了作用域限定符来访问特定命名空间的变量。
注意: 命名空间可以嵌套定义,即可以在命名空间A内嵌套定义命名空间B,访问时需要双重作用域限定符,例如访问B中的变量a, cout<<A::B::a<<endl;命名空间最好少用using随便导入全局空间,否则会破坏命名空间的限制作用,导致变量重复定义或者冲突。C++允许在不同源文件里定义同名的命名空间,但是要注意作用域限定符会默许访问本文件的命名空间的变量(除非使用using导入)
1.2 增强了输入输出函数(cout cin)
对于传统的输入输出scanf与printf,其格式控制比较复杂,在C++中为了简化格式控制,将其升级后放入了标准命名空间中,并重命名为cin与cout,注意cin有其它成员函数cin.get()【读一个字符】,cin.getline()【获取一整行】等。C语言中printf是行缓冲模式,一般由n来进行流的刷新,cout与其一样,也属于行缓冲。但是C++引入了cerr(无缓冲)与clog(缓冲),可用于与dup配合进行重定向输出日志与出错文件保存信息。
1.3 constexpr
C语言的define不检查语法错误,只做替换constexpr在编译期间处理,没有额外开销,做类型检查,返回值为常量可以声明为该类型.
1.4 register
register关键词的作用是请求编译器j尽k让变量直接存放在寄存中,以提升变量的访问速率
C语言:register关键词不可以取地址,因为不在内存之中,C++中:register关键词可以取地址,一旦取地址后,regitser关键词变得无效,被定义的变量会被放到内存中
1.5 const
C语言const定义的是只读变量,可以通过取其地址然后通过指针间接改变其值,在C++中,const定义的是常量 ,不能改变其值。
1.6 struct
C语言的struct定义的类型不是一种新类型,每次说明该类型时必须加上struct关键字(除非使用typedef重命名),C++认为struct是一种新类型,以后使用该类型时,可以不加struct 关键字。并且C++在结构体中允许定义函数成员,而在C语言的结构体里不能定义函数。同时struct可以指定访问权限,private,public,protected。一般默认不说明时是公有权限。
private/protected:只能在结构体里访问,结构体外访问不到
public:可以在外部直接访问
访问权限的好处在于隐藏了数据,提高了数据的安全性。但是要修改变量时,必须提供对应的访问操作函数,即get/set方法。C++对struct的升级的主要目的是为了引入类(class)的概念,定义的结构体如果把struct关键字换成class也是符合语法的,并且类可以继承,结构体也能继承,二者几乎完全一样,只是有两点不同:
二者的名称不同,一个是类,其实例化的变量叫做对象,其成员变量称为属性,成员函数称为方法,另一个是结构体,实例化变量叫做结构体变量;
再者,struct 的默认权限是公有,而class默认权限是私有。
1.7 auto
C语言的auto一般可以省略,表示自动类型的变量,使用完后自动释放,在C++中将其增强为自动类型推导,可以根据赋予的初值自动推导该变量的类型。
1.8 typedef / using
函数:int add(int a,int b);
C语言中对函数指针的重命名不友好,在C++中进行了优化
C: typedef int (*P_FUNC)(int ,int); P_FUNC p_add=add;
C++: using P_FUNC = int(*)(int ,int) ; P_FUNC p_add=add;
1.9 三目运算符
a=1,b=20;
C: a>b?a:b ; 返回的是一个变量b的值20
C++: a>b?a:b ; 返回的是一个变量,可以赋值 (a>b?a:b)=10;(将b赋值10)
1.10 foreach
C++ :数组遍历 int a[5]={0,1,2,3,4} ; for(int tmp:a) cout<<tmp;
1.1 while
支持逗号表达式,while(a>b,c>b)等等
最后
以上就是土豪茉莉为你收集整理的C++对C语言的增强的全部内容,希望文章能够帮你解决C++对C语言的增强所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复