zoukankan      html  css  js  c++  java
  • 第2章 变量和基本内置类型

    2.1 算术类型

    bool
    char          character                        8
    wchar_t        wide character                16
    char16_t      Unicode character           16
    char32_t      Unicode character           32
    short          short integer                  16
    int          integer                          16
    long         long integer                   32
    long long                                        64
    float          single-precision floating-point    6 significant digits
    double          double-precision floating-point    10 significant digits
    long double     extended-precision floating-point 10 significant digits

    char_t类型保证机器最大扩展字符集中任意字符都可以存储

    char16_t和char32_t为unicode字符集服务

     

    比特bit、字节byte、字word

    1byte=8bit

    word的大小与机器有关,一般为4byte

     

    signed和unsigned

    对于char类型来说,其实现在不同的机器上可能是不同的,有些是signed,有些则是unsigned,因此在需要用char进行数学算术运算的时候,应该指明符号。

    将一个负数,强制转换为一个无符号的数字的时候,结果为这个负数加上无符号数的模。

    例如,将-1转换为unsigned short:unsigned short的模为65536,则unsigned short(-1)的结果为65535

    更深刻的理解是,将一个负数转换成无符号数字的时候,直接是将其补码的符号位1,当做正常的无符号数字解读,其内存中的数据没有变化,如下:

        cout<<short(0xffff)<<endl;                    //输出-1
        cout<<unsigned short(0xffff)<<endl;            //输出65535
        cout<<unsigned short(short(0xffff))<<endl;    //输出65535

     

    进制表示

    15 十进制,015 八进制,0x15十六进制

     

    字符串可以分行书写

        cout<<"姓名 学号
    "
              "王五 0125";

    转义序列

    后紧跟1-3个八进制数字

    x后紧跟1-*个十六进制数字

    字面值前后缀

    前缀

    u Unicode 16字符 char16_t

    U Unicode 32字符 char32_t

    L 宽字符   wchar_t

    u8 UTF-8   char[]字符串

    后缀

    u/U unsigned

    l/L   long

    ll/LL long long

    f/F   float

    l/L   long double

    类型可以组合,比如42ULL为unsigned long long

    2.2 变量

    变量初始化

    int value1 = 0;
    int value2 = {0};
    int value3(0);
    int value4{0};
    //以上四个效果相同
    
    vector<int> value5{1, 2, 3, 4, 5};//存储了1 2 3 4 5
    vector<int> value6(10,-1);//存储了10个-1

    内置类型(int、double、char)在定义时如果没有给定初始值,将不被初始化。

    访问全局变量

    int value=10;
    int main()
    {
        int value=5;//覆盖了全局变量value
        int newValue=::value;//使用::访问全局变量
    }

    2.3 复合类型

    引用reference

    int &rValue=value; 变量或者对象的别称,占用同一块内存,在声明引用的时候必须初始化,初始化后不可改变引用的变量或对象。

    指针pointer

    int *pValue=&value; 声明一个变量,其存储的是另外一个变量的地址。

    空指针:

    int *pValue=nullptr;

    int *pValue=0;

    int *pValue=NULL; //需要include<cstdlib>

    void *指针

    任何类型都可以用void*指针,可以认为void*指针就是对应一块内存区域。

    2.4 const限定符

    指针和const

    const int value = 32;    //value对应的内存不能改变
    
    //指向常量的指针pointer to const
    const int *cpValue = &temp;    //cpValue对应的内存可以改变(可以重新指向另一个变量),但是temp不可以通过cpValue改变(指向的变量不能更改)
    
    //常量指针const point
    int *const pcValue = &temp;      //pcValue对应的内存不能更改(不可以重新指向另一个变量),temp可以通过pcValue更改(指向的变量可以更改)
    
    //指向常量的常量指针
    const int *const cpcValue = &temp;//都不可以更改

    补充:const int *const p = &value,其中第二个const是顶层,限制p的内存不能更改;第一个const是底层,限制指向的内存不能改。

    constexpr和常量表达式

    常量表达式指的是在编译的时候就可以确定的值的常量。

    比如下边两个都是常量表达式:

    const int max_files = 20;
    const int limit = max_files + 1;

    但是有时候不能确定一个语句是不是常量表达式,这就可以constexpr进行变量声明,由编译器验证是不是常量表达式:

    constexpr int limit = mf + 1;//只有当mf是编译时确定值,表达式才能通过编译

    2.5 类型的处理方式

    类型别名

    typedef double wages, *pWages;//wages是double的别名,pWages是double*的别名

    using db = double;//C++11中支持的

    auto

    auto item = v1 + v2;//由编译器推断item的类型

    decltype

    选择并返回操作数的数据类型

    decltype( f() ) sum = x;

    当操作数加括号,表示操作数的引用类型

    decltype( (f()) ) sum = x;

     

     

  • 相关阅读:
    webpack学习之——模块(Modules)
    dns-prefetch对网站速度能提升有多少?详解dns-prefetch。
    类数组对象汇总
    HTML input type=file文件选择表单的汇总(二)
    238. 除自身以外数组的乘积
    1029.两地调度
    滑动窗口:无重复字符的最长子串
    统计网格中的矩形以及正方形
    关于正负数的二进制新发现以及求法
    基础练习: 矩阵乘法
  • 原文地址:https://www.cnblogs.com/qiusuo/p/4469048.html
Copyright © 2011-2022 走看看