第二章(变量和基本类型)的学习笔记,采用关键词的形式进行一一阐述。
1.变量
变量,或者说对象,其实就是内存中具有类型的区域,且具有名字供程序操作。
例如:int i =0,int为类型,i 为变量名。
在这里就引申出两个概念:变量名和类型。
变量名,就是标识符,由字母、数字和下划线构成;特别的是C++区分大小写,不过变量命名一般使用小写;当然不支持C++保留的关键字。
类型,如int(整型),告诉我们一个存储在被命名为“i”的区域的数据是整数,而不是浮点数;其中隐含的信息还有,该区域占内存的大小,该区域的数据所能进行的操作。
类型,有基本内置类型和自定义类型(包括标准库类型),int就是一个内置类型。
2.定义和声明
例如int i =0,这是一个变量定义的形式。
定义,用于为变量分配存储空间,或者说有目的地划出内存中的某个区域,并给予名字和类型。
注意的是在一个程序中,定义有且只有一个。
声明,用于向程序表明该变量的类型和名字。使用关键字extern进行说明,例如extern int i;
一个程序,会包含多个文件,为了在多个文件中使用同一个变量,需要向程序表明该变量的类型和名字,于是就用上了声明。
声明不是定义,不分配存储空间,只是定义在其他地方的使用说明。
区别:
声明可以多次,定义只有一次;
定义就是声明,声明不是定义,但使用了初始化的声明可看做是定义(如extern int i=0;).
3.初始化
int i=0;这程序语句的完整意思是:定义了一个变量名i的存储空间用来存放数据,并将它初始化为0,即预先存放数据0。个人理解为占位,在图书馆的座位上,贴上自己的名字,并放上自己的书包。
初始化就是那个书包。注意,任何没有放书包的占位都是不可靠的,同样,任何没有初始化的定义都是不可靠的。
当然,有时系统会自动帮我们初始化,即默认初始化。对于内置类型变量,这取决于变量定义的位置,即后面提到的作用域;对于类类型变量,大多数都提供默认构造函数。(类类型变量通过构造函数进行初始化)
4.作用域
一个定义的变量,在程序不同的地方会发挥不同的意义,这就是作用域,用于区分变量在哪些地方发挥不同意义。
作用域分为全局作用域、局部作用域和语句作用域。其中,作用域可以嵌套,嵌套过程中,语句作用域屏蔽局部,局部屏蔽全局,由里到外。
5.const、引用和const 引用
const,定义常量的限定符。定义常量代表一个常数,在程序上具有很好的作用。
定义方法如const int i=0;常量定义后具有不可修改性,所以必须初始化;另外,const变量(即常量)可以通过声明(extern)跨文件访问,并且是显示 表示,非const变量则默认为extern。
引用,实质只是它绑定的对象的别名,对象的另一个名字;对引用的操作都实际作用在绑定的对象上。引用通过变量名前添加“&”来定义,并且必须初始化.
引用定义如 “int j=0;int &i=j;"。
const引用,指向const对象的引用,如”const int j=0;const int &i=j; “。
const引用可以绑定到非const对象上,但非const引用绑定到const对象是不合法的,个中原因还得从引用的实质中寻找”引用,实质只是它绑定的对象的 别名,对引用的操作都实际作用在绑定的对象上“。
6.typedef
typedef,定义类型的同义词。暂时不知有何好作用,以观后效。
7.枚举
枚举,为某些属性定义一组可选择的值;定义如:enum open_modes {intput,output,append};enum为关键字,open_modes为枚举类型名,{intput,output,append}用{}括起来的枚举成员。
枚举成员,第一个默认初始化为0,其后递增+1;成员可以初始化为某个常量;枚举成员为常量表达式,一旦初始化后不能改变。
至于后面几节关于类类型的,之后和第三章一起学习更为妥当!
C++ Primer 学习笔记(2),布布扣,bubuko.com
原文地址:http://www.cnblogs.com/ferrylin/p/3794322.html