初始化
初始化不是赋值,初始化的含义是创建一个变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
列表初始化
int u=0;
int u = {0};
int u{0};
int u(0);
默认初始化
定义变量时没有指定初值,则变量被默认初始化
定义于函数体内的内置类型未初始化,则其值未定义。
类的对象没有显示初始化,其值由类决定
2.2.2 变量声明和定义的关系
c++支持分离式编译(separate compilation)
声明使名字为程序可知
定义负责创建与名字关联的实体
想声明而非定义用关键字extern
extern int j ;//声明i而非定义I
int I ; //声明并定义I
包含显示初始化的声明即为定义
extern double pi = 3.141592653589793 ;//定义
变量只能被定义一次,但可被多次声明
2.2.3 标识符
字母和下划线开头
变量命名规范
1. 标识符体现实际意义
2. 变量名用小写字母
3.自定类名开头大写
4. 单词间区分 student_loan
2.2.4 名字的作用域
作用域(scope)是程序的一部分。c++大多数作用域以花括号分隔。
定义在main函数中的sum变量
main和定义在函数体外的名字具有全局作用域(global scope)
sum具有块作用域(block scope)
、建议第一次使用变量时再定义它
嵌套的作用域
除局部变量正在作用域内(in scope)
规则如
::reused
使用作用域操作符(::)来覆盖默认的作用域规则
因为全局作用域本身没有名字,所以当作用域操作符左侧为空时,向全局作用域发出请求获取作用域操作符右侧名字对应的变量
Warning: 如果函数可能会用到全局变量,则不宜在定义一个同名的局部变量