4-表达式

  • 当一个对象用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置)

  • 优先级固定了运算对象的组合方式,但是没有说明运算对象按照什么顺序求值。int i = f1() * f2();这里我们无法确定f1()和f2()谁先执行。

    只有四种运算明确制定了运算对象的求值顺序。&& || :? ,

  • 除法运算向0取整,取余运算结果符号与被除数一致。

  • 赋值运算符满足右结合律

    int val, *pval;
    val = pval = 0; //非法,int *不能赋值给int
  • IO运算符满足左结合律
  • sizeof运算符返回一条表达式返回值类型或者一个类型所占的字节数,其中不对表达式求值。

    sizeof *p这里即使p是无效指针也没错,因为sizeof不需要真正解引用就可以得到所指对象的类型

  • 逗号运算符

    int a, b = 3, c = 5;
    a = b, c; // a = 3;
    a = (b, c); // a = 5;
  • 类型转换

    • static_cast:任何具有明确定义的类型转换,只要不包含底层const,就可以用static_cast.

      int i = 2, j = 3;
      doubel slope = static_cast<double>(j) / i; 
    • const_cast:只能改变底层const(只能用来改变常量属性,不能改类型)

      const char *pc;
      char *p = const_cast<char*> (pc);  //去掉const属性,不过通过p写值是未定义行为
    • reinerpret_cast:为运算对象的位模式提供较低层次上的重新解释

猜你喜欢

转载自blog.csdn.net/yijiull/article/details/81183280