变量提供具名的、可供程序操作的存储空间
C++变量都有数据类型,决定其所在内存大小和布局方式、储值范围
C++中,变量和对象一般可以互换使用
1 变量定义
形式是 [类型说明符] [变量名],其中变量名可以多个由逗号隔开,最后以分号结束
定义时候可以给变量赋初始值,称为初始化
同一条定义语句中,可以用先定义的变量值去初始化后定义的其他变量
double price = 120.99, discount = price * 0.8
可以用函数返回值来初始化变量
虽然初始化和赋值都是用=号,但其实二者是完全不同的操作
初始化是创建变量并赋予初始值,赋值时删去当前值,并用新值代替
使用花括号的初始化,称为列表初始化
double id = 3.14;
int a{id};//报错
int c(id);//不报错,强制转换
2 默认初始化
变量定义时没有赋值就会默认初始化,被赋予默认值,由变量类型决定
定义于任何函数体内的变量初始化为0
定义域函数体内部的内置类型变量将不被初始化
未初始化的内置类型变量的值是为定义的,不能拷贝或访问
绝大多数类都支持无须显式初始化而定义对象,会提供默认值
未被初始化的变量含有不确定值,因此最好都进行初始化
3 变量声明和定义的关系
C++支持分离式编译,可以分割成若干个文件,独立编译
C++将声明和定义区分开,声明使得名字为程序所知,如果要在别处定义就要先声明
定义负责创建与名字关联的实体
声明规定变量类型和名字,定义除了声明的功能,还申请内存,并给变量赋初始值
如果想声明而不是定义,就添加关键字extern,且不要显示初始化
如果用了extern,但显式初始化,则是完成了定义
extern int i; // 声明i而非定义i
int j; // 声明并定义j
extern int k = 10; // 定义k
函数体内部不能初始化由extern标记的变量
变量只能定义1次,但可以声明多次
多个文件同时用到1个变量,只能定义1次,但每个文件都需要声明
C++是一种静态类型语言,编译阶段检查类型过程称为类型检查
4 标识符
C++标识符由字母、数字、下划线组成,且必须字母或下划线开头,长度不限制,但对大小写敏感
不能使用C++保留名字
用户自定义标识符不能连续出现两个下划线
不能下划线紧连大写字母开头
函数体外的标识符不能以下划线开头
变量约定俗成规范,增加可读性
- 标识码要体现具体含义
- 变量名一般用小写字母,如index
- 用户自定义类名一般以大写字母开头,如Sales
- 标识符由多个单词组成,则要区分,如student_loan或studentLoan
5 名字作用域
作用域大多以花括号分割
同一名字在不同作用于指向不同的实体
函数体外的名字具有全局作用域,函数体内是块作用域
建议在第一次使用变量时再定义
嵌套作用域,被包含时内层作用域,包含别的是外层作用域
一旦声明某个名字,则所嵌套的作用域都能访问
函数内部不宜定义与全局变量同名的新变量