C++ primer 读书笔记(第2章)变量和基本类型

来源:互联网 发布:网络计划图绘制方法 编辑:程序博客网 时间:2024/06/06 01:23

1.数据类型是程序的基础,它告诉我们数据的定义以及我们能在数据上执行的操作。

2.int最小为16.为一个机器字长,一般为32.

  short 半个机器字长,16,long为一个或2个机器字长,32位机器中,int和long一样长。

3.内存中每个字符与一个数字(地址)关联起来。

4.源码、补码、反码

求补码,是从右向左第一个1落下,除符号位之外都逐位取反。

5.将负数改变成无符号数,数并不改变,只是符号位的意义变成了数值,负数是以补码形式存放的。

6.float是7个有效位,double是16个有效位,有效位就是有效数字。(尾数是有效数字?)

float 是32位,double是64位,能用单精度则用单精度,节省内存。

7.当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的。

赋值给无符号类型,可能事对表示范围取模后的余数。

8.当一个运算表达式中有int和无符号,则将int转换为无符号型。

9. 0 _八进制    0x 16进制

10.编译器在每个字符串的结尾处添加一个空字符 '/0',所以字面值长度比它的内容多1.

11.\_ _ _ 表示一个八进制数字

   \x_ _ _ _后面跟的是16进制数

12.由单引号括起来的成为char型字面值,双引号括起来的成为字符串字面值。

字符串字面值的类型实际上是由常量字符构成的数组。

13.对象是指一块能存储数据并具有某种类型的内存空间。

14.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。

15.定义与函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显示的初始化,则其值由类确定。

需要初始化每一个内置类型的变量

16.变量能且只能定义一次,但是能够多次声明。

如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而不是显示地初始化变量。

17.局部变量的定义会隐蔽全局变量的定义。

18.复合类型是指基于其他类型定义的类型。

包括引用和指针

19.引用    引用为对象起了另外一个名字,引用类型引用另外一种类型     &来进行声明。

引用相当于对另外一个已存在的对象起了个别名,并非对象,引用必须要初始化。

记住:不能定义引用的引用

引用只能绑定在对象上,而不能与字面值货某个表达式的计算结果绑定在一起。

20.将一个double型字面值赋值给int型变量,会发生隐式类型转换。

类型转换?

21.引用只有一个对象

     指针本身就是一个对象,可以指向几个不同的对象。

22.解引用操作仅适用于那些确实指向了某个对象的有效指针。

23.nullptr可以用来初始化指针。

  24 赋值永远改变的是符号左侧的对象。

25.把int变量直接复制给指针是错误的操作,即使int变量的值恰好等于0也不行。

26.*  &是类型修饰符在定义语句中。

27.指针是对象,所以存在对指针的引用

*& r=p     

说明&r是一个引用,记住要从右向左读r的定义。

28.const对象一旦创建,其值就不能再改变,所以const对象必须初始化,初始化可以是任意复杂的表达式。

29.如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern 关键字,注意是定义,而不是声明。其他文件想使用,在声明的时候要加上extern

30.对常量的引用,在定义时,一定要加上const

31.常量引用(是前面加了一个const),仅对可以参与的操作做出了限定,对于引用的对象本身是不是一个常量未做限定。

32.指向常量的指针(意思前面加了一个const)仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变。

33.指向常量的指针(可以修改,不过一定要指向常量),对指向的内容不能做修改

   指针常量   (里面的地址不做修改),区分通过从右向左读。

34.字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。

35.如果你认定变量时一个常量表达式,那就把它声明为constexpr类型。

36.一个costexpr指针的初始值必须是nullptr或者为0,或者是存储于某个固定地址的对象。

37.限定符constexpr仅对指针有效,与指针所指的对象无关。

38.定义类型别名

typedif  

新规定采用using   类型=类型别名

39.auto是一种自动分析表达式所属的类型,auto定义的变量必须有初始值。

decltype  编译器分析表达式并得到它的类型,并不实际计算表达式的值。

如果decltype获得的类型是引用,则它的定义必须初始化。

40.decltype 如果给变量多加上了一层括号(本来是一层)则编译器就会把它当做一个表达式,变量时一种可以作为赋值语句左值的表达式,所以这样的decltype会得到引用该类型。

41.要在类定义的最后加上分号。

42.头文件一旦改变,相关的源文件,必须重新编译以获取更新过的声明。

43.预处理变量无视C++语言作用域的规则。

  预处理变量的名字必须全部大写

一定要写上头文件件保护符。#ifndef   *** #define    #endif

44.全局作用域的内置类型对象初始化为0.局部作用域的对象未被初始化即拥有未定义的值。

45.vodi *   可以指向任意非常量的指针类型,不能指向解引用操作。



0 0
原创粉丝点击