第四章 表达式

来源:互联网 发布:如何在淘宝上申请退款 编辑:程序博客网 时间:2024/05/16 02:42
    左值,用的是对象的身份(内存中的位置),右值,用的是对象的值

    解引用生成左值,取地址生成一个右值

    bool b = true;
    bool c = -b;        //c为true,因为bool值在计算的时候被转换成整型号int,所以b被转换成-1,不为0,所以赋值给c的时候,为True

     int b;
     while ( b = get_value() != 3 ){                         //说明“=”赋值运算符优先级较低,会先进行逻辑运算
      cout << "bingo " << b << endl;
     }

    赋值语句之后,返回的是左值,本身不是逻辑表达式,加了括号也一样

    后自增 > 前自增 > 解引用(优先级比较)

    sizeof使用时,引用大小为引用对象大小指针解引用,为所指对象所占空间大小

    sizeof(short) = 2 ; sizeof(int) = sizeof(long) = 4;         //本系统中的情况,具体需要是机器而定

    
    此处需要了解指向数组的指针,b的类型实质为 int (*) [5]

    常量整数值0字面值nullptr能转换成任意类型指针;指向任意非常量指针能转换成void *任意对象指针能转换成const void *

4.11类型转换(const、static、dynamic、reinterpret)

    任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast(用于将大类型转成小类型,表示用户不在乎记录丢失

    const_cast只能改变运算对象的底层const属性,不能改变类型,常用于有函数重载的上下文中
            const char * cp;
            const_cast<string>(cp);        //    错误,只能提供const转换,不能提供类型转换

    reinterpret_cast为运算对象的位模式提供较低层次的重新解释
            int *ip;
            char * pc = reinterpret_cast<char *>(ip);        //    编译没有问题,但是执行报错

    建议,尽量避免使用强转!!!

    dynamic_cast和继承和运行时类型识别一起使用

    区别“~”与“!”,一个是位运算求反,一个是逻辑运算求非
0 0
原创粉丝点击