附录A_C++语法细节

  1. const int* const pa = &a;

    const 修饰的是紧跟在后面的东西:

    第一个const修饰int,代表指针指向的int值不能变;

    第二个const修饰pa,代表指针(也就是地址)不能变。

  2. C++允许对一个名字重复声明,但是只能定义一次

  3. volatile

    告诉编译器,这个变量可以以语言定义以外的方式改变,编译器不能对变量进行强制性的优化

  4. register

    告诉编译器,如果可能的话,运行时将变量值存储在寄存器中以优化程序

  5. extern

    当前的声明并非一个定义,对应的定义在程序的其他地方可以找找

  6. mutable

    只用于类的数据成员,表示一个mutable的数据成员,即使被定义为常量成员,也可以被修改

  7. inline

    编译器在编译时,尽可能将函数定义的代码内插到程序中用到该函数的地方

    注:一般inline函数,文件声明和定义放在一起,都放在头文件中

  8. 只有一种情况例外,否则任何一个实体的类型都是在编译期确定

    这种例外情况:

    在一个继承树中,通过一个指针或者引用访问的对象的类型

  9. C++的类型

    1. 整型

      一共6种

           short               int            long
       unsigned short    unsigned int   unsigned long
      

      注:

      (1) 到底多长不一定,看具体的机器类型,只能说每种至少16/32/64位

      (2) size_t 类型是其中一个无符号整型的替代名,保证在该类型的变量中可以容纳的最大的对象(包括数组)的尺寸

    2. 整型直接量

      (1) 组成部分:基数标志 + 大小标志

      基数标志:这个数 123

      注:整型直接量没有符号,所以 -3 其实是一个表达式

      大小标志:

       u -- 无符号
      
       l -- long
      

      (2) 如果一个整型直接量只有基数标志,没有大小标志,那么编译器按照

       int > unsigned int > long > unsigned long
      

      的顺序推断它的类型

    3. 布尔类型

      (1) bool

      (2) 数字或指针

        0   -- 布尔假
       其他 -- 布尔真
      
    4. 布尔直接量

       true
       false
      
    5. 字符类型

      (1) char,同样分为有符号和无符号,至少8位

      (2) wchar_t 代表宽字符,包含至少16位

    6. 字符直接量

      ‘a’

    7. 字符串常量

      “Hello World”

      类型为 const char*,编译器自动在末尾加上’\0’

    8. 浮点类型

      (1) 3种类型

       float   double   long double
      

      精度关系:

       long double ≥ double ≥ float
      

      (2) float 至少表示十进制下的6位数, double和long double 至少表示十进制下的10位数

      (3) -3.1 是一个表达式,而非一个浮点数常量

      (4) 默认double,加f代表float,加l代表long double

    9. 常量表达式

      (1) 一个常量表达式中只能包含四种

       1. 直接量
      
       2. 枚举类型量
      
       3. 常量变量
      
       4. **整型**的static数据成员(这个static成员要求用另一个常量表达式或者sizeof赋值)
      

      (2) 一个常量表达式的值,在编译时已经确定

    10. 类型转换

      (1) 原则:转换倾向于保留原有信息,而不是丢失信息

      (2) 从一个较大的带符号类型,向一个较小的类型转换,转换值由具体的系统进行定义

      (3) 算术运算中的类型转换

      1° 操作数中只要有浮点数,结果一定是浮点数,结果精度取操作数中精度最大的类型
      
      2° 操作数中有unsigned long,结果一定是unsigned long
      
      3° 如果操作数中一个是unsigned非long,另一个是long int,结果取决于系统环境中long int和unsigned int哪个大,哪个大取哪个
      
      4° 操作数中有long int且不满足3°,结果就是long int
      
      5° 两个操作数都是int或者更短的类型,结果一定是int类型
      
      ---> 任何算术运算都无法得到short和char
      
    11. 枚举类型

      (1) 示例

          enum Poker {
              Heart = 1,
              Blade = 2,
              Diamond = 3,
          };
      

      (2) 用来初始化的值必须是整数类型

  10. 表达式

    1. 运算符重载

      (1) 运算符重载不会改变运算符的优先权

      (2) 不能重载对C++内建类型操作数进行运算的内建运算符

    2. 左值

      一个有地址的非临时对象,可以放在表达式的左边

        ::m  ---  全局作用域内的变量m
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值