zoukankan      html  css  js  c++  java
  • C/C++基础----变量和基本类型

    变量和基本类型

    不同平台下基本类型的字节数

    类型

    16位平台

    32位平台

    64位平台

    char

    1

    1

    1

    short

    2

    2

    2

    int

    2

    4

    4

    long

    4

    4

    8

    long long

    /

    8

    8

    指针

    2

    4

    8

    float

    4

    4

    4

    double

    8

    8

    8

    类型的最小尺寸

    类型

    含义

    最小尺寸

    bool

    布尔类型

    未定义

    char

    字符

    8位

    wchar_t

    宽字符

    16位

    char16_t

    Unicode字符

    16位

    char32_t

    Unicode字符

    32位

    short

    短整型

    16位

    int

    整型

    16位

    long

    长整型

    32

    long long

    长整型

    64

    float

    单精度浮点数

    6位有效数字

    double

    双精度浮点数

    10位有效数字

    long double

    扩展双精度浮点数

    10位有效数字

    数据类型选择的经验准则

    • 当知晓数值不可能为负时,选用无符号类型
    • 使用int执行整数运算,short常常太小,long和int一般尺寸一样。如果int不够,用long long。

    • 在算数表达式中不要使用char或bool,使用char特别容易出问题。如果要使用一个不大的整数,那么明确执行为signed char或unsigned char。

    • 执行浮点数运算用double,float通常进度不够而且两者计算代价相差无几。Long double一般没有必要,且消耗不容忽视。

    有符号类型和无符号类型

    • 无符号类型赋值超出其范围,结果是取模后的值。如unsigned char c = -1;  //假设char占8bit,c的值为255
    • 有符号类型赋值超出其范围,结果未定义。如signed char c2 = 256;  //假设char占8bit,c2的值未定义
    • 切勿混用带符号类型和无符号类型。
    • 算数表达式中既有无符号数又有带符号数,带符号的数会转换成无符号的数

    指定字面值的类型

    字符和字符串字面值

    前缀

    含义

    类型

    u

    Unicode16字符

    char16_t

    U

    Unicode32字符

    char32_t

    L

    宽字符

    wchar_t

    u8

    UTF-8(仅用于字符串字面常量)

    char

    整型字面值

    浮点字面值

    u or U

    unsigned

    f or F

    float

    l or L

    long

    l or L

    long double

    ll or LL

    long long

     

     

    初始化与赋值

    初始化和赋值是两个完全不同的操作

    • 定义于函数体(块作用域)内的内置类型的对象如果没有初始化,则其值未定义。养成初始化内置变量的习惯。
    • 类的对象如果没有显式地初始化,则其值由类确定。

    声明与定义

    • 声明使得一个名字为程序所知,定义会申请存储空间,还可能为其赋初始值
    • (分离式编译)

      如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量
    • 对于复杂的声明语句,可以从变量名从右往左理解

    指针

    • 常见错误:解引用无效指针(空指针或已释放的指针)
    • 建议:初始化所有指针,并且尽量等定义了对象之后再定义指向它的指针。
    • 推荐nullptr而非0,0指针具有二义性。

    const和constexpr

    • const对象默认在文件内有效,当多个文件出现了同名const变量,等同于不同文件中定义了独立的变量。

      如果想不同文件之间共享const,则不管在声明还是定义中都添加extern关键字。

    • 顶层const表示本身是个常量,底层const表示指针指向的对象是一个常量。

    • 执行对象拷贝操作时,顶层const不受影响,底层const却不容忽视

    常量表达式:值不会改变且在编译阶段就能计算结果的表达式。

    • 复杂系统中很难分辨初始化是不是常量表达式,C11允许声明为constexpr由编译器来验证
    • 尽管指针和引用可以定义成constexpr,其初始值受到严格的限制。constexpr指针的初始值必须是nullptr或者0,或者是储存于某个固定地址中的对象。储存于函数体之外的对象其地址固定不变,能用来初始化constexpr指针。

    auto与decltype

    • auto一般会忽略掉顶层const,同时保留底层const。
    • decltype的表达式是一个变量,则decltype返回该变量的类型,包括顶层const和引用在内。

    • decltype如使用的表达式不是一个变量,则返回表达式结果对应的类型。
    • 如表达式是解引用操作,则得到引用类型。

    • 如果是加了双层括号的变量,则结果永远是引用。

    预处理变量无视C++中关于作用域的规则

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/logchen/p/9439774.html
Copyright © 2011-2022 走看看