2、C与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++中的三目运算符如果都是变量的话则直接返回变量本身,即可作为右值使用,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值