第二章 变量和基本类型
1.C++定义的基本数据类型:算数类型,空类型。其中算数类型包括整形(字符型,布尔型)和浮点型。
2.char 的最小尺寸最8位,int 16位,long 32位。int 可以表示的数的范围是 -(2^16)/2~(2^16)/2-1=-32768~32767.
3.除去布尔型和扩展字符型,其他整型可以划分为带符号的和无符号两种。
带符号类型signed表示正数负数和0,无符号类型unsigned表示大于等于0的值。
unsigned int 可缩写为unsigned。unsigned int的取值范围是0~(2^16)-1。
字符型被分为char,signed char,unsigned char三种。
4.当知道数值不可能为负数时用无符号类型。执行浮点数运算选用double。
5.当赋给无符号类型一个超出他表示的范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数;当赋给带符号类型一个超出他表示范围的值时,结果是未定义的。
6.一个算数表达式中既有无符号数又有int时,int的值会转换为无符号数。
7.对象Object是指一块能存储数据并具有某种类型的内存空间。变量和对象的区别和联系
8.定义变量的基本形式是:类型说明符+变量名组成的列表。
9.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象当前值擦除,而以一个新值来代替。
10.定义在任何函数体以外的变量被初始化为0,定义在函数体内部的内置类型变量将不会初始化,一个未被初始化的类型的值时未定义的,将引发错误。string类规定如果没有指定初始值则生成一个空串。所以建议初始化每一个内置类型的变量。
11.一个文件如果想要使用别处定义的名字则必须包含对那个名字的声明。声明规定了变量的类型和名字,在变量名前添加extern即可,如果带上初始值就成为定义而不是声明。变量能且只能被定义一次,但是可以被多次声明。 C/C++中extern关键字详解
12.C++是一种静态类型语言,其含义是在编译阶段检查类型。如果试图执行类型不支持的运算,将不会产生可执行文件。
13.C++标识符有字母数字下划线组成,其中必须以字母或下划线开头,不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,定义在函数体外的标识符不能以下划线开头。
14.全局作用域+块作用域。位于for循环内的变量出了循环就不能访问了。作用域能彼此包含,被包含的作用域称为内层作用域,包含着别的作用域的作用域是外层作用域。允许在内层作用域中重新定义外层作用域已有的名字。如果a=12拥有全局作用域,在局部作用域中重新定义a=10,那么a的输出值就是10,如果要输出12的话要用作用域操作符::a。但是,如果函数有可能用到某全局变量,就不宜在定义一个同名的局部变量。
15.一条声明语句由一个基本数据类型和紧随其后的一个声明符列表组成。
16.引用是为对象起了另一个名字。引用不是对象。
通过将声明符写成&d的形式来定义引用类型。eg: int b=10; int &a=b。a指向b。
在定义引用时,程序把引用和他的初始值绑定在一起而不是将初始值拷贝给引用。
引用必须初始化(绑定)。
除去两种特殊情况,引用的类型必须要和与之绑定的对象严格匹配。引用只能绑定在对象上,不能绑定在字面值或者某个表达式的计算结果上。
17.指针本身就是一个对象。允许对指针赋值和拷贝。
定义指针类型的方法将声明符写成*d的形式。int *a; a为指向Int型对象的指针。
指针存放某个对象的地址,使用取地址符&获取:int *a=&b, a存放b的地址,或者说a是指向变量b的指针。
除了两种特殊情况,指针的类型都要与他所指的对象严格匹配。
使用解引用符*来访问对象。比如int a=10;int *p=&a; 输出p为a的地址,*p为10;如果给解引用的结果赋值,实际上是给指针所指的对象赋值。如下面的例子:
int i = 123, j = 321;
int *p = &i, *q = &j;
*q = 111;
std::cout << i << '\n' << *p << '\n' << j << '\n' << *q << endl;
19.a=&b 为a赋一个新的值,改变了a内的地址值,a的值被改变,a指向b;*c=0 *c所指的对象发生改变,指针c本身未改变。
20.const 限定符可以把变量定义成常量,const 对象一旦创建后其值就不能再改变,所以const 对象必须初始化。默认情况下const 对象被设定为仅在文件内有效,当多个文件中出现了同名的const 变量,等于在不同文件中分别定义了独立的变量。如果想要在不同文件间共享,加上extern关键字。
21.对常量的引用不能被用作修改它所绑定的对象。
22.
const int *a=&b;
int *const a=&b;
const int *const a=&c;
第一条是指向常量的指针,a指向int型常量;
第二条是常量指针,a一直指向b,不变的是指针本身而非指向的那个值;
第三条是a是一个指向常量对象c的常量指针。
23.顶层const 表示指针本身是个常量;底层const表示指针所指的对象是一个常量。
24.decltype作用是选择并返回操作数的数据类型。 eg:decltype(f()) sum = x; sum的类型就是函数f的返回类型。
如果decltype使用的是表达式不是一个变量,则返回表达式结果对应的类型。如果表达式的是一个解引用操作,则返回引用类型。如果是双层括号,返回结果永远是引用。