2、变量和基本类型

2、变量和基本类型

  • 1.算术类型
    • C++规定sizeof(int)>=sizeof(short),sizeof(long)>=sizeof(int),sizeof(long long)>sizeof(long),long long是C++11中新定义的
    • double比float扩展了精度值,计算代价相差无几甚至更快,long double基本没必要的且带来的耗时也不容忽视
    • 需要注意的是,char、signed char、unsigned char三者是不一样的,虽然char会表现为后两者之一,但具体是由编译器决定的
    • C++没有约定带符号的类型如何表示但约定了正值和负值的量应该平衡

    • 无法预知和依赖于实现环境的行为:无法预知的行为源于编译器无须(有时是不能)检测的错误,程序也应尽量避免依赖于实现环境的行为,如把int的尺寸看做是确定不变的,看下表。

      原文:https://sourceforge.net/p/predef/wiki/DataModels/

      Data typeLP32ILP32LP64LLP64ILP64SILP64
      char888888
      short161616161664
      int163232326464
      long323264326464
      long long64646464
      pointer323264646464
    • 1.2.字面值常量
      • 如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则实际是一个整体。
      • 转义序列
        • \a,报警响铃符,\b,退格符,\f,进纸符,\v,纵向制表符
        • 泛化转义序列:\x后紧跟1个或多个十六进制数,或\后紧跟1/2/3个8进制数
      • 指定字面值类型:前缀(u/U/L/u8)、后缀(uU lL(long/long Double) fF llLL)
  • 2.变量

C++的每个变量都有类型,决定了所占空间大小和布局方式和能参与的运算

  • 变量的定义(下面4种初始化方式都是可以的)
    int a1 = 0;
    int a2 = {0};
    int a3{0};  //列表初始化,存在丢失风险时将报错
    int a4(0);
    
  • 变量声明和定义的关系
    • 声明规定类型和名字,定义还申请空间、赋值
      • 声明:由一个基本类型(base type)和一个声明符(declarator)列表组成
  • 2、复合类型
    • 2.1 引用:为对象起+ 90另外一个名字
      int ival = 1024;
      int &refVal = ival;
      
    • 2.2 指针,实现了对其他对象的间接引用
      • 空指针
        • :char *p1 = nullptr,*p2 = 0,*p3 = NULL;都可生成空指针
        • nullptr是一种特殊类型的字面值
        • NULL是预处理变量,和0一样
      • void *指针:可存放任意对象的地址
    • 2.3 复合类型申明

      变量定义:基本数据类型+一组声明符(类型修饰符)

      int i=0,*p=&i,&r=i; //一条定义语句,一个基本数据类型可定义出不同类型的变量

      • 指向指针的引用:引用不是对象,所以不能定义指向引用的指针,但指针是对象(从右向左读)

        int p,&r=p;//r是对指针p的引用

    • 2.4 const 限定符

      默认情况下,const对象仅在文件内有效,C++允许:对于connst变量不管是声明还是定义都加上extern关键字(gcc编译会报错)

      • const的引用:const int &r1 = ci;//不能修改绑定的对象
      • 引用的类型必须与其所引用的对象一致,except①初始化常量引用时允许用任意表达式做初始值 ②允许常量引用绑定非常量对象、字面值、表达式
      • 常量表达式:值不变,编译过程中能得到计算结果

        const int a = 1;//常量表达式

        int b = 1;//非常量表达式

        const int c = getSize();//非常量表达式(运行时才能获取值)

      • 可用constexpr修饰常量表达式
        • 指针必须被声明成nullptr或0
        • 函数体内定义的变量不存放在固定地址,不能用它修饰
        • const int *p = nullptr; //指向整型常量的指针
        • constexpr int *q = nullptr; //指向整数的常量指针,等效于 int *const q
    • 2.5 处理类型
      • 类型别名
        typedef char * pstring;
        const pstring p1 = 0;
        const char *p2 = 0;//注意这个类型和上面的不一样
        
      • auto类型说明符

        通过初始值推断变量的类型,会忽略顶层const,保留底层const

      • decltype类型指示符

        选择并返回操作数的数据类型(包括顶层const和引用在内)

    • 2.6 自定义数据结构
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页