1.变量的初始化
C++支持两种初始化变量的形式:复制初始化和直接初始化。
int a(10);//直接初始化
int a=10;//复制初始化
当初始化类型对象时,复制初始化和直接初始化几乎没什么区别,只有在编写非常复杂的类时才显示出他们的区别,现在只需记住 直接初始化比复制初始化效率更高。
注:在函数体外定义的变量都自动初始化为0,但在函数体内并不进行自动初始化,未初始化变量引起的错误难以发现,所以一定要对变量进行初始化。
2.变量的声明和定义
声明用于向程序表明变量的类型和名字,而不分配存储空间。变量的定义用于为变量分配存储空间。
extren int a;//声明但未定义
int a;//声明并且定义
3.名字
作用域
定义在所有函数外部的名字具有全局作用域(global scope),可以在程序的任何地方访问。在函数中定义的名字可以在函数中使用,具有局部作用域(local scope)。在语句中定义的名字,只能在本语句中使用,而不能在其他位置使用,具有语句作用域(statement scope)。
#include<iostream>
int i=0;//global scope
int main()
{
int a=1;//local scope
for(int j=0;j<3;++j)//statement scope
std::cout<<a<<" ";
return 0;
}
注:局部
变量能够隐藏全局变量
#include<iostream>
using namespace std;
int i=42;
int main()
{
int i=100;
int j=i;
cout<<j<<endl;
return 0;
}
输出结果是100;
3.const 限定符
const 限定符把一个对象转换成一个常量,常量在定义后不能被修改,所以必须初始化。
const int a=1;
const int b;//编译时会报错,提示常量未初始化
const 对象默认为文件的局部变量,在全局作用域声明的const变量是定义该对象的文件的局部变量,其他文件不能。若想在整个程序中访问这个变量必须显式的指定const变量为extern,但非const变量默认为extern。
4.枚举
枚举的定义包括关键字enum,其后是一个可选的枚举类型,和一个用花括号括起来用逗号分开的枚举成员。
enum open_modes{input,output,append};
默认的,input初始化为0,output初始化为1,append初始化为2
可以指定枚举成员的值
enum Pointers{ point2d=1,point2w,point3d=5,point3w};
point2d初始化为1,point2w初始化为2,point3d初始化为5,point3w初始化为6