(一)C++类型增强

来源:互联网 发布:数码大师软件多大 编辑:程序博客网 时间:2024/05/29 17:13

c++的类型增强主要体现在以下几点

1. 类型检查更严格2. 增加布尔类型3. 真正意义上的枚举4. 表达式也可被赋值

1类型检查更严格

//类型检查比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。

3真正的枚举

enum     {    OFF,ON};//上面的枚举等价于 #define OFF 0              // #define ON  1enum 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来代替宏.

4表达式可以做左值

int main(){    int a,b;    (a = b) = 100            //在c语言中不能通过,但是在c++中可以通过        (a !=b ? a : b) = 1000;  //在c语言中不能通过,但是在c++中可以通过    return 0;    //c语言中可以拿表达式赋值给别人,但是表达式不可以赋值}
    4.1在c++中表达式可以做左值,主要是运算符重载机制,具体的我们在运算符重载去分析
0 0