第2章 变量和基本类型

  1. 算术类型在不同的机器上有尺寸有所差别
类型 含义 最小尺寸
bool 布尔类型 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 36位
short 短整型 16位
int 整形 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字

除了char的一些扩展其他都在C里面学习过

char 的空间可确保存放机器基本字符集中任意字符。
其他字符用于扩展字符集。

  1. 类型转换
#include <iostream>

int main(void)
{
    bool b = 42; //为真。初始值负0才为假
    int i = b;  //i = 1; 当把布尔值给非布尔值是。初始为0,结果为false。为true则1
    i = 3.14;   //i = 3; 直接截断了
    double pi = i; //pi = 3.0 进行类型转换
    unsigned char c = -1; //c = 255; 无符号类型没有负数。8比特的char赋给他负数就是。1 % 256的余数
    signed char c2 = 256;//超出都是未定义的
    return 0;
}
  1. 当无符号对象和有符号对象相加时,有符号对象会转换成无符号对象。这时有负数就十分危险
前缀 含义 类型
u unicode 16字符 char16_t
U Unicode 32字符 char32_t
L 宽字符 wchar_t
u8 UTF(仅用于字符串字面常量) char
  1. 默认初始化:定义在所有函数外部的的变量被初始化为0.而在函数内部的内置类型变量将不被初始化。就是未定义的。

  2. 引用

    • 引用就是为对象起了另外一个名字,当引用改变时,对象也改变
    • 引用必须被初始化
    • 引用类型的初始值,必须是一个对象且引用必须引用相同类型
int i = 1024;
int &r = i;    //&是引用符
  1. 指针

    • 指针本身便是一个对象,允许对指针赋值和拷贝
    • 指针和其他内置类型一样,在快作用域内定义的指针如果没被初始化,也是一个不确定的值。所有在使用指针是,当不确定要指向何处是先将他变成空指针
    • C++空指针方法
int *p1 = nullptr;
int *p2 = 0;
int *p2 = NULL;   //需要包含#include cstdlib
指针和引用的主要区别
  • 引用必须初始化,指针不需要
  • 引用一旦初始化完毕便不能更改,指针不需要
  • 指针是一个对象,而引用不是
  • 使用sizeof看指针的大小是4,而引用是被引用对象的大小
  1. auto类型说明符:由编译器根据值推断类型。同一行auto必须是相同类型。
  2. decltype:从表达式推断定义的变量类型
    练习2.1:类型int、long、long long和short的区别是什么?无符号类型和带符号类型的区别是什么?float和double的区别是声明。
    int和long的区别是存储数字的范围。
    无符号和带符号区别是能不能存储负数。
    float和double能存小数点后多少位。double更长

练习2.3:读写结果

#include <iostream>

int main(void)
{
    unsigned u = 10, u2 = 42;
    std::cout << u2 - u << std::endl;  //10
    std::cout << u - u2 << std::endl;  //一个取模后的结果

    int i = 10, i2 = 42;
    std::cout << i2 - i << std::endl; //32
    std::cout << i - i2 << std::endl;//-32
    std::cout << i - u << std::endl; //0
    std::cout << u - i << std::endl;//0
}

练习2.15:下面哪个定义是不合法的?为什么?

    int ival = 1.01;          //合法,小数点后面会被截断,但是不要这么定义
    int &rval1 = 1.01;      //不合法,引用必须是一个对象
    int &r = ival;        //合法
    int &rval3;           //不合法引用必须初始化
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容