1、变量初始化:
定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。变量的初始化如下:
int val1 = 0; //初始化
int val2; //未初始化
OS使用不同的值作为文件结束符。Windows系统下通过输入Ctl+z来输入文件结束符,Unix中通常是Ctl+d。
1.什么是变量:变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储与该内存中的值的取值范围以及可运用在该变量上的操作集。
2.C++关键字
有两种初始化方式:复制初始化(copy-initialization)和直接初始化(direct-initialization)。
int ival(1024); //direct-initialization
int ival = 1024; //copy-initialization
初始化不是赋值,初始化指创建变量并给它赋初始值,而赋值是檫除对象的当前值并用新值代替。
1.内置类型变量的初始化
内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。除了用作赋值操作 符的做操作数,未初始化变量会引起错误难以发现。所以建议每个内置类型的对象都要初始化,虽不是必须但会更加容易和安全。
2.声明与定义
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义、。
声明:用于向程序表面变量的类型和名字。定义也是声明,当定义变量时我们声明了他的类型和名字。可以通过使用extern关键字声明变量名而不定义他。不定义的声明包括对象名、对象类型和对象类型前的关键字extern“
extern int i; //declares but does not define i;
int i; //declares and define i
程序中声明可以多次,但是定义只有一次。只有当声明也是定义时,声明才可以初始化,因为只有定义才分配存储空间。初始化式必须有存储空间来初始化。
1.魔数:其意义在上下文没有体现出来。
2.const限定符将一个对象转换成一个常量 const int bufSize = 512; //bufSize是不可以修改的
因为常量在定义后就不能被修改,所以定义时必须初始化。
3.const对象默认为文件的局部变量:在全局作用域定义非const变量时,可以在整个程序中都可以访问。把一个非const变量定义在一个文件中,在另一个文件中使用这个变量。
//file_1.cpp
int counter; //definition
//file_2.cpp
extern int counter; //uses counter from file_1
++counter; //add counter defined in file_1
在全局作用域声明的const变量是定义在该对象的文件中的局部变量,此变量只存在那个文件中,其他文件不能访问。通过指定const变量为extern,就可以在整个程序中访问const对象:
//defines and initializes a const that is accessible to other files
extern const int counter = 12; //definition
//file_2.cpp
extern const int counter; //uses counter from file_1
//uses counter defined file_1
for(int index=0; index != counter; ++index)
{
////
}
非const变量默认认为extern。要使const变量能够在其他的文件中访问,必须显示的指定为extern。
引用(reference)就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,在变量名前添加"&"符号来定义。复合类型指其他类型定义的类型。
int ival = 1024;
int &refVal = ival; //ok
int &refVal2; //error: a refernce must be initialized
int &refVal3 = 10; // error:initializer must be an object
1.定义和初始化:枚举的定义包括关键字enum,其后是一个枚举类型名。默认第一个枚举成员赋值为0,后面的每个比前一个大1.
//input is 0, output is 1, and append is 2
enum open_modes {input,output,append};
2.枚举成员是常量:用来初始化枚举成员的值必须是一个常量表达式,
//shape is 1, sphere is 2, cylinder is 3, polygon is 4
enum Forms {shape = 1, sphere, cylinder, polygon};
Forms中shape赋值为1,其他的是隐式初始化依次为2,3,4
3.每个enum都定义一种唯一类型
1.头文件经常需要其他头文件
2.避免多重包含:预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字使用都关联到该预处理器变量。
预处理器变量有两种状态:已定义和未定义。可以使用下面这段代码来预防多次包含:
#ifndef __CPLUSPLUSPRIMER_H__
#define __CPLUSPLUSPRIMER_H__
//....
#endif //__CPLUSPLUSPRIMER_H__