《完美C/C++》之C与C++的区别(一)

2 篇文章 0 订阅
  1. 类型检查的区别
  2. 枚举的区别
  3. 左值也可被赋值
1、类型检查更严格
//c++类型检查比c语言更加严格
int main()
{
    //****************1*****************
    const int a;        //c++中必须初始化
    int *p = &a;        //&a == const int *
    *p = 110;           //在c语言中可以用指针来修改const int的值

    //****************2*****************
    char *p = malloc(100);          //c语法
    char *p = (char *)malloc(100);  //c++语法
    return 0;
}

同样的代码在c语法中就能编译通过,但是在c++中就会报错。
1.1const int a在c++中就必须要初始化,不然就报错,但是在c语言中就能编译通过,而且是个随机值。
1.2上列中的 int p = &a在c++中编译不会通过,原因是变量a是const int类型,那么取地址就为const int 类型,把一个const int 类型赋值给int 在c++语法中是通不过的,但是c语言就可以通过,而且可以用该指针间接的修改const int a的值,这是c语言的一种缺陷。
1.3我们都知道mallo(100)返回的是void ,在c++语法中建议俩个类型相同才赋值,所以char *p == void 在c++语法中应先把void 强转为char ,注:基础类型可以相互转化如int ,double, float。

2、枚举的区别
eume BOOL
{
    FALSE, TRUE
};
int main()
{
    bool b = false;          //c++中的布尔类型的本质是枚举类型
    b = 100;b = 10.9;b=-10;  //c++中的布尔类型可以赋非0值为真
  //BOOL a = 100             //在c++中错误

}

2.1在c++中枚举只可以赋值你枚举的那些值,不可以赋值其他的,否则报错,但是c语言的枚举可以.
2.2在c++的语法中不必须使用 enum、struct等前缀,但是在c语言中就必须要使用前缀来声明,如:enum BOOL a。


enum     
{
    OFF,ON
};
//上面的枚举等价于 #define OFF 0
              // #define ON  1
enum WEEK
{
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
int main
{
    //***************1**********************
    WEEK week;   //未初始化,所以是随机值
    //week = 100  //错误
    week = Monday //正确 
    //***************2**********************

    int a = OFF;
    if (a == ON)
        ......//开灯
    else
        ......//关灯

    return 0;
}

3.1定义枚举变量不能赋予枚举值以外的值。如:WEEK week = 100; 但是在c语言中不会报错。
3.2用枚举来代替宏,所以c++中建议用枚举或者用const来代替宏.

3、c++表达式也可以做左值
int main()
{
    int a,b;
    (a = b) = 100            //在c语言中不能通过,但是在c++中可以通过    
    (a !=b ? a : b) = 1000;  //在c语言中不能通过,但是在c++中可以通过
    return 0;
    //c语言中可以拿表达式赋值给别人,但是表达式不可以赋值
}

4.1在c++中表达式可以做左值,主要是运算符重载机制,具体的我们在运算符重载去分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值