重读c++primer(4)
1 变量
变量提供一个具名的,可提供程序操作的存储空间。c++中的每个变量都有其数据类型,数据类型决定着变量所占内存大小和布局方式,该空间能存储的值的范围。另外,变量和对象这两个表达方式可以互换。
变量定义:
变量定义的基本形式是:类型说明符,随后紧接着一个或多个变量名所组成的列表。其中变量名以逗号分隔。最后以分号结束。定义时还可以为一个或多个变量赋初值:
int sum=0,value,units_sold;
Sales_item item;//item的类型是Sale_item
std::string book("0-201-78345-x");//string是一个库类型,表示一个可变长的字符序列
在上例中book以直接方式进行初始化。
初始值:
当对象在创建时获得了一个特定的值,我们说这个对象被初始化了。用于初始化的值可以是任意复杂的表达式。例如:
double price =109.99,discount=price *0.16;
double saleprice =applydiscount(price,discount);
注意,在c++语言中,赋值和初始化是两种不同的操作,但很多编程语言中二者的区别几乎可以忽略不计。
初始化的含义是创建变量时赋予一个初始值,而赋值的含义是把当前对象擦除,用新值代替。
默认初始化:
如果变量没有指定初值,则变量被默认初始化。此时变量被赋予默认值。如果内置类型的变量未被显示初始化,它的值由定义的位置决定,定义于任何函数体外的变量被初始化为0,定义在函数体内部的变量不被初始化。一个未被初始化的内置变量的值是未定义的。如果拷贝或赋值将引发错误。绝大多数类都支持无须显示初始化而定义对象。这样的类提供合适的默认值。例如,string类如果没有设定初始值,将设定为空串。
简单说一下分离式编译机制。
c++语言支持分离式编译。该机制容许程序分割为若干文件,每个文件可被独立编译。如果将程序分为多个文件。需要在文件之间共享代码。如果在一个文件中定义了一个变量。如果在另一个文件中想用它,则必须声明它个变量。在声明时加extern关键字。如:
extern int i;
注意:变量能且只能被定义一次,但是可以多次声明。
标识符:
c++中的标识符由字母,数字,下划线组成。开头只能由字母或下划线来当。长度没有限制。但是注意大小写。
另外,c++保留了一些名字为标准库。比如标识符中不能连续出现两个下划线,也不能以下划线接字母开头。
复合类型:
1 引用
引用为对象起了另外一个名字。引用类型引用了另外一种类型。通过将声明写成&d的形式来定义引用类型。
比如:
int ival=1024;
int &refval=ival;
在定义引用时,程序把引用和它的初始值绑定在一起。而不是将初始值拷贝给引用。引用必须初始化,一旦初始化完成,引用和它的初始值对象一直绑在一起。不能修改。
引用就是别名,并非对象。相反的,它只是为一个已经存在的对象所起的另外一个名字。定义了一个引用之后,对其进行的操作都是在与之绑定的对象上进行的。
refval=3;
int ii=refval;
为引用赋值,实际上是把值赋给与引用绑定的对象,获得引用的值,实际上是获取引用绑定的对象的值。以引用做初始值,实际上是以与引用绑定的对象作为初始值。
引用本身不是对象,所以不能定义引用的引用。