C++primer 第四章笔记 初稿

4.1 基本问题

  1. 左值和右值

    • 自增自减运算符作用于左值对象,解引用和下标运算符得到左值;
    • decltype作用于左值得到引用类型,右值得到普通类型;
  2. 求值顺序

    • 优先级一般只规定了组合方式,并未规定求值顺序以及函数的调用顺序;
    • 只有 && || ?: 和, 规定了求值顺序。

4.2 算术运算符

  1. -号对布尔运算无效;
  2. 溢出运算;
  3. 取余运算可以为负,但不可以为浮点数;

  4. m/(n)=n/(m)=(m/n)
    m%(n)=m%n , (m)%n=(m%n)

4.3赋值运算符

如果想右结合连续赋值,就必须满足变量类型相同或可相互转化;

4.4 递增递减运算符

  1. 优先选择前置递增而不是后置递增;
  2. 后置递增运算符优先级高于解引用运算符;

4.5 位运算

  1. 位运算存在一定的升级扩容,但不会无限扩大;
  2. 有时将某个01集合用一个二进制值存储,并用位运算进行操作。

4.6 类型转换

  1. 隐式转换的整型提升

    • 一般都是向更宽更大的方向变化;
    • 较大的char被转换成可容纳的int,unsigned int等中最小的一类;
    • unsigned short与int按照具体所占空间决定;
  2. 显示转换

    • static_cast 静态转换

      • 当需要忽略精度时,使用显示静态转换,可以消除警告(相当于声明了就是要忽略精度);
      • 不可以对底层const转换;
      • 不可以实现非void类型指针之间的转换;
    • const_cast 常量转换
      只能改变底层const属性;

    • dynamic_cast 动态转换

      • 具有运行时类型检查的特性,只能被使用在将变量转化为类的指针/类的引用/void*时;
      • 进行父类子类之间的显示转换时更加安全;
    • reinterpret_cast 重解释转换

      • 可以实现指针的非void类型之间的转换;
      • 是一个非常危险的行为;

你可能感兴趣的:(C++primer 第四章笔记 初稿)