2、C与C++的关系

本文详细探讨了C与C++的关系,包括C++对C的继承和增强,如面向对象支持、类型加强、异常处理等。介绍了C++中变量定义的改变、struct的加强、const关键字的进化、新增的bool类型和引用。还讨论了内联函数、函数参数的扩展、函数重载、动态内存分配、命名空间和新型的类型转换。通过对这些特性的对比,揭示了C++在语言设计上的改进。

C与C++的关系

1、c++继承了所有的c特性

2、c++以C语言为基础,又增强了面向对象的支持,类型加强,函数加强,异常处理。

3、语言中的变量都必须在作用域开始的位置定义,c++可以在需要使用时再定义。

4、register关键字请求编译器将局部变量存储于寄存器中,但是编译器是可以拒绝的。c++编译器有自己的优化方式,变量也可能存储在寄存器中,所以c++中很少见register,只是为了兼容c语言而已。c语言中无法获取register变量的地址。c++可以取得register变量的地址。

5、c语言中可以定义多个同名的全局变量,C++中不允许定义多个同名的全局变量。

6、struct关键字的加强

    c语言中的struct定义了一组变量的集合,并不是一种新的类型(如果要当成新的类型,需要用typedef关键字重命名一下)。c++在类型的加强后,把struct定义为一种全新的类型。

7、c++中所有的标识符都必须显示声明类型,不像c语言中的默认类型,c++则不支持默认类型,不允许不写函数返回类型。

    一个小问题:  int f()与 int f(void) 有区别吗?

    c++中两个函数具有相同的意义,表示返回值为int的无参函数。c语言中两个函数则不一样,int f()表示返回值为int,接受任意参数的函数,而int f(void)则表示返回值为int的无参函数。

8、const关键字的进化

    C语言中const修饰的变量是只读的,使得变量具有只读属性,本质还是变量,它修饰的局部变量还会在栈上分配空间,只在编译期有效,在运行期无效。特别的,const修饰的全局变量在只读存储区分配空间,因此修改了const修饰的全局变量将出现奔溃。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边,所以const不能定义真正意义的常量。C语言中真正意义的常量只有枚举。通过指针可以修改const修改的变量值。

    c++中当碰见const声明时在符号表中放入常量。编译过程中若发现使用常量则直接以符号表中的值替换。符号表是编译器在编译的过程中产生的数据结构。编译过程中若发现下述情况则给对应的常量分配存储空间: 

    (1)对const常量使用了extern,即当const常量为全局并且需要在其它文件中使用。(2)当使用 & 操作符对const常量取地址。 

    注意:c++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。 原因是为了兼容C语言。

与宏的区别:const常量是由编译器处理,编译器对const常量进行类型检查和作用域检查(宏没有)。编译器中没有宏的概念,宏定义由预处理器处理,单纯的文本替换(字面量),没有类型检查和作用域概念。

    const int *p=&x;    底层

    int * const p=&x;   顶层

    const int *const p=&x; 靠右的const是顶层,靠左的是底层const

9、c++中新增加了bool基础类型和引用

c++(类型增强和面向对象特性)在C语言的基本类型系统之上增加了bool类型(布尔类型),可取的值只有true和false,理论只上占用一个字节。true用1表示,false用0来表示。C语言中用int代替bool不严谨。

   c++对三目运算符进行了升级,c语言中三目运算符返回的是变量值,不能当做左值来使用。c++中的三目运算符如果都是变量的话则直接返回变量本身,即可作为右值使用,又可作为左值使用(只有在所有的可能返回值都是变量时才能使用)。

    注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。

c++中的引用:变量名的本质是存储空间的别名。在c++中新增加了引用的概念,可以看做是一个已定义变量的别名。

Type& name=var;

 问题:c++对三目运算符做了什么?

    当三目运算符的可能返回都是变量时,返回的是变量引用。当三目运算符的可能返回中有常量时,返回的是值。

10、引用的本质--第5课

    引用在一些场合可以代替指针,列如swap函数。引用作为函数形参不需要初始化。函数调用时需要初始化。

const引用:

const引用让变量拥有只读属性,但是也能通过指针来修改值。

另一种情况:特殊的引用:当使用常量对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段空间的别名。使用字面常量对const引用初始化后将生成一个只读变量。

    问题:引用有自己的存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值