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 * 可以指向任意非常量的指针类型,不能指向解引用操作。
|