C++学习笔记--C到C++的扩展

今天是我正式学习C++的第一天,那么作为一个学习单片机和嵌入式的程序员来说为什么还要学习在应用软件方面用处比较广泛的C++呢?而不是努力深入学习C语言呢?最开始我也同意如此认为的,嵌入式方面都是和底层打交道的,那为什么要放弃它而往应用层上学习,学好C的同时再学习数据结构不就行了?操作系统和驱动程序什么的都是用C写的,那我们学好C不是就够用了吗?甚至有些大牛都觉得C++用处并不大,还有就是以后做驱动开发后还有必要和精力学习C++吗?

这些问题看似都是对的,但是这永远都不是我们故步自封的原因。大牛觉得C++没用那是因为他也许是一生致力于C语言的研究,所以说觉得C++没用也是情有可理的,因为对他来说不用就等于没用;学嵌入式的人或许会觉得没必要学C++,但是一套系统并不仅仅只有驱动程序需要人来编写,在现在行业中写驱动程序的领域已经变得很小很窄了,如果只想着在这一个领域涉足,那发展宽度也就限制死了,而且很多人第一份工作都不会是直接编写驱动程序或者操作系统,简单点说没有那个能力。一套应用系统不仅包括硬件还包括软件,如果能整体把握它的框架那么你是否觉得前途会一片光明而不会担心具体某个行业衰落而导致退出整个行业,我觉得,要想实现这个,那学习C++就是你跳出底层把握整个系统框架的第一步。

C++与C之间并无什么竞争关系,反而C++是C的加强版,C++兼容C的所有语法并且还能学习到更多的设计模式。因为C是在实践过程中发展来的,没有经过深思熟虑的设计过程,所以难免保留过多低级语言的特征。C中要想解决一个大问题需要分而治之,这样就导致可重用性和可维护性差,而C++就完美的解决了这些问题,它是将现实问题直接映射到程序中,能够适应用户不断变化的需求。

前奏打得有点长,那么正式开始介绍今天的主题,在学习C++之前需要知道C++相对C有哪些扩展需要我们知道并注意的。

一、C++更强调语言的实用性

C中我们有过这样的经历,变量一定是在代码作用域最开始的地方进行定义,在后面使用。

C++中支持变量在需要时定义比如for(int i = 0; i < 10; i++)这在C中编译是会出错的,C++的支持使得语言更加的人性化和实用性。

二、register关键字

register关键字的作用相比都知道是请求编译器将某个局部变量保存在寄存器中。为什么会存在register关键字呢?因为早期的编译期不会对代码进行优化,所以register可以作为一个优化方法使用。

C++中依然支持register关键字,但是它有自己的优化方式。

C中无法获取register变量的地址,因为应用程序使用的地址都是虚拟地址,所以无法获取物理地址。

C++可以取得register变量的地址,C++编译器若是发现对register变量取地址时,那么register对变量的声明将会无效。它的存在只是为了兼容C。

三、定义多个同名全局变量

C中允许定义多个同名全局变量,C中多个同名全局变量最终会被链接到全局数据区的同一个地址空间上。C++中直接拒绝这种操作。

四、struct的区别

C中使用struct定义的是一组变量的集合,struct定义的标识符并不是一种新的类型,需要使用typedef来说明后才能使用标识符定义变量,比如:

typedef struct student{...}Student;

Student stu1,stu2;

在C++中struct后面的标识符直接作为一种新类型面世,比如:

struct Student{...};  

Student stu1,stu2;

五、int f()与int f(void)区别

在C中两个函数是有区别的,int f()表示返回值是int类型,可以接收任意多个任意类型的参数;intf(void)表示返回值类型是int,不接收参数。

C++中两个函数的意义是一样的,即返回值是int类型,不接收参数

C中允许出现f(i)、g()这样的定义方式,它是有默认返回值类型(C中的默认数据类型是int)的,C++中默认类型是不合法的,C++中任意标识符都需要显式指明类型。

六、const比较

在C中const定义的是一个拥有只读属性的变量,修饰的局部变量在栈上分配空间,修饰的全局变量在只读存储区分配空间。它不是真正的常量,它的作用是告诉编译器const变量不能作为左值使用,并且仅仅能够维持在编译器,在运行期还是能通过指针改变const类型的值。

在C++中当碰见const声明时在符号表中放入常量,编译过程中若发现使用const常量则直接以符号表中的值替换;若发现对const常量使用了extern关键字或者对const常量使用&操作符时则给常量分配存储空间(分配后不会使用内存空间里的值,使用常量还是从符号表中替换)。C++中的const作用类似于宏的文本替换,但又不完全相等,宏是在预处理期进行文本替换,而C++中的const常量在编译时会进行类型检查和作用域检查。举个例子:

  const int A = 1;
    const int B = 2;
    int array[A + B] = {0};

上面三行代码若是在C编译器中则会报错,因为变量是在运行时才会知道具体的值;在C++中则不会出错,因为在碰到const常量时就会发生替换。

所以说C++中的const是真正意义上的常量,并且兼容C中的语法特性,而C中的常量是由enum定义的。

七、bool类型    

C++在C的基础数据类型上增加了bool类型(true 为真值,用1表示和false为非真值,用0表示),理论上bool类型只占一个字节。bool类型变量在内部还是实行数学运算,但是非0为true。

八、三目运算符

 int a = 1;   int b = 2;   (a<b ? a : b) = 3;

上面代码在C中是会报错的:lvalue required as left operand of assignment,表示左操作数不能作为左值,所以说C中的三目运算符返回的是值,而不是变量;C++中能够正常编译,打印值为:a = 3;b = 2;说明C++中的三目运算符返回的是变量本身,既可以作左值,也能作右值,但是在C++中需要注意的一点是如果三目运算符中有可能出现的返回值

是常量则不能作为左值使用。 
九、标准输入输出
C中使用的是printf和scanf作为标准输入输出,C++中使用cout和cin。
C++在C的基础扩展就是这些了,存在即有理,让我们慢慢体会C++为他扩展而带来的变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值