笔记——C++Primer变量和基本类型

笔记——C++Primer1.2变量和基本类型

内容

基本内置类型

  1. 算术类型分为整型和浮点型。基本内置类型包括算数类型和空类型。
  2. 字符和布尔型属于整型类。
  3. 最小尺寸表
    在这里插入图片描述
  4. 可寻址的最小内存块称为字节。
  5. 大多数机器1字=8字节=64位(bit)、或1字=4字节=32位(bit)。
  6. 类型决定了数据所占的比特数,以及该如何解释这些内容。
  7. int、short、long、long long 都是带符号的,通过在前面添加unsigned可以得到无符号类型,字符型被分为char、signed char和unsigned char,类型char实际上会表现为有符号和无符号其中的一种,取决于编译器。signed char表示-128到127之间的值,unsigned char表示0到255之间的值。
  8. 执行浮点数运算选double,有些机器双精度比单精度计算快。
  9. 赋给无符号类型一个超出它范围的值时候,结果等于范围和所赋值取模的余数。
  10. 赋给有符号类型一个超出它范围的值时候,结果是未定义。

变量

  1. String是库类型,std::string book("123");
  2. 内置类型的变量未被显式初始化,它的值由定义的位置来决定。定义于任何函数体之外的值被初始化为0,反之将不被初始化,访问会引发错误。
  3. 绝大多数类都支持无须显示初始化而定义对象。
  4. 类的对象如果没有显式初始化,则其对值由类自己决定。
  5. 建议初始化每一个内置类型的变量。
  6. 任何包含了显示初始化的声明即为定义。
  7. 变量能且只能被定义一次,但可以被多次声明。
  8. 变量名前添加关键字extern并且不显示初始化为声明。
  9. 函数体内试图初始化extern标记的变量将引发错误。
  10. 标识符由字母、数字、下划线组成。
  11. 不能连续出现两个下划线,不能以下划线紧接大写字母开头,函数体外标识符不能以下划线开头。
  12. 允许在内层作用域内重新定义外层作用已有的名字。

复合类型

  1. 引用必须被初始化。
  2. 引用并非对象,只是给已存在的对象起一个别名。
  3. 指针本身就是一个对象,可以拷贝和赋值。
  4. 不能定义指向引用的指针,引用没有实际地址。
  5. int* p = 0; 等价于 int* p = NULL;
  6. NULL是预处理变量。
  7. 指针和引用的区别:

指针是一个实体,而引用仅是个别名;
引用使用时无需解引用(*),指针需要解引用;
引用只能在定义时被初始化一次,之后不可变;指针可变;
引用没有 const,指针有 const;
引用不能为空,指针可以为空;
“sizeof引用”得到的是所指向的变量(对象专)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
指针和引用的自增(++)运算属意义不一样;
从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。

  1. int *&r = p; 从右往左阅读有助于弄清楚它的含义。
  2. 对const修饰的变量引用时也要加Const
  3. 允许指向常量的指针指向一个非常量的对象。
  4. 常量指针 *const ,指针的地址不可改变。
  5. 顶层const是任意对象是常量包括复合类型对象,底层const是指针指向的对象是常量。
  6. 常量表达式是指值不会改变,并且在编译过程中就能获得计算结果的表达式。
  7. constexpr指针的初始值必须是nullptr或0或一个存在固定地址的对象。
  8. 定义于所有函数体之外的变量地址是固定不变的,可以用来初始化constexpr指针。
  9. constexpr声明中如果定义了一个指针,只对地址有效,对指向的对象无效。所以consterpr int *p 是常量指针。
  10. 别名声明。using SI = Sales_Item;
  11. 类型别名。 typedef double wages;
  12. auto类型说明符必须有初始值。
  13. auto 一般会忽略掉顶层const,如果需要就明确指出 const auto f = 。。。;
  14. decltype会返回函数的返回类型,返回变量的类型(包括引用和顶层const)。变量是引用时候必须初始化,功能类似于加强版auto。decltype(ci) z = …;
  15. 如果decltype表达式的内容是解引用操作,将得到引用类型。
  16. decltype表达式内的变量加括号会得到引用类型,不加就是变量的类型。
  17. 左值右值:

左值lvalue:可被引用的数据对象,例如,变量、数组元素、结构成员、引用和解除引用的指针都是左值。常规变量和const变量都可视为左值,因为可通过地址访问它们。常规变量属于可修改的左值,const变量属于不可修改的左值。
右值rvalue:字面常量(用括号括起来的字符串除外,因为它们表示地址)、包含多项的表达式以及返回值的函数(条件是该函数返回的不是引用)。

  1. 预处理变量无视C++语言中关于作用域的规则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值