C到C++的升级

--事物的难度远远低于对事物的恐惧! 

        现在正式进入C++的世界,大家安全带系好,马上发车了!

        这一章节来聊一聊C到C++的升级,我们来回顾下上一章节《学习C++的意义》的内容,我们知道,C++是一种加强版的C语言,兼容了C的特性,同时也提供了更为先进的软件设计方法:面向对象的设计方法。除此之外,C++还提供了更多的语法和特性,完美兼顾了开发效率与运行效率,可谓是青出于蓝而胜于蓝!

C到C++的升级主要体现在:

    1、C++的变量可在使用时定义,而C必须在代码作用域的开头处定义    

for(int i=0; i<10; i++)    //循坏条件中的i,在C++中,可在使用时再定义,而C语言则不能。
{
    //your code...
}

    2、C++与C一样,register关键字都会请求编译器将局部变量存储于寄存器中(这是为了兼容C语言),区别在于:C语言不能取register变量的地址;而现代C++编译器会做相应优化,使得C++可以取得register变量的地址,但实际上C++代码中极少看见register关键字,仅仅是为了兼容C语言而已。

    3、C语言中可以定义多个重复的全局变量,这些重复的变量最终会被链接到全局数据区的同一个地址空间上;而C++中不允许定义多个重名的全局变量,直接拒绝这种二义性做法。

    4、struct关键字在C++中用于定义一种全新的类型,而在C中,struct只是定义一组变量的集合,并不是一种新的类型。请看如下的代码,看看对于使用Student,哪个更加简洁?

//C语言中的做法
typedef struct _student Student
struct _student
{
    const char* name;
    int age;
}

//C++中的做法
struct Student
{
    const char* name;
    int age;
}

    5、C++中所有的标识符都必须显示的声明类型,C语言中的默认类型在C++中是不合法的。

        思考一下:int f()、int f(void)、f(void)三者有区别吗?如果有,那么区别是什么?

        C语言中:

            -int f()表示返回值为int,接受任意参数的函数

            -int f(void)表示返回值为int的无参函数

            -f(void)表示返回值默认为int类型的无参函数

 

        C++语言中:

            -int f()表示返回值为int的无参函数

            -int f(void)表示返回值为int的无参函数(以上一个相同)

            -f(void) //不合法,因为不支持返回值为默认参数的函数

        如下代码,想想在C中编译与在C++中编译,情况一样吗?

#include <stdio.h>

struct Student    //C中编译出错,C++编译通过
{
    const char* name;
    int age;
};

f(i)    //C中编译通过,C++编译不通过
{
    printf("i = %d\n", i);
}

g()    //C中编译通过,C++编译不通过
{
    return 5;
}


int main(int argc, char *argv[])
{
    Student s1 = {"zhangsan", 30};    //C中OK, C++中error
    Student s2 = {"lisi", 30};      //C中OK, C++中error
    
    f(10);    //C中OK, C++中error
    
    printf("g() = %d\n", g(1,2,3,4,5));    //C中OK,C++中error
    
    return 0;
}

总结:

    1、C++实用性更加强大,可以在任意地方声明变量,也可以在使用时再声明

    2、C++中的register只起到兼容C的作用,实际C++开发中很少遇见到

    3、C++编译器能够更好的优化

    4、C++中的任意标识符都必须显示的指明类型

好了,本章内容就先写到这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值