1、初始化和赋值的区别:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,并以一个新的值替代。

2、一般初始化方式有

int a=0;
int a={0};
int a{0};
int a(0);

在C++11新标准中,一般使用花括号来初始化变量。这种初始化形式被称为列表初始化。但如果在对内置类型进行初始化时,如果使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。如:

long double ld=3.1415926536;
int a{ld},b={ld};//错误,转换未执行,因为存在丢失信息的风险。
int c(ld),d=ld;//正确:转换执行,且确实丢失了部分值。

3、默认初始化:如果定义变量时没有指定初值,则变量被默认初始化。定义于任何函数体之外的变量被初始化为0。一种特殊情况,定义在函数体内部的内置类型变量将不被初始化,其值是未定义的,如果进行拷贝或者其他形式访问该类值将引发错误。(但是,有的编译器或工具也会对定义在函数体内部的内置类型变量进行初始化)。

定义于函数体的内置类型的对象如果没有初始化,其值未定义。类的对象如果没有显示地初始化,其值由类确定。

4、未初始化变量引发运行时故障

(1)、未初始化的变量含有一个不确定的值,使用未初始化变量的值是一种错误的编程行为并且很难调试,编译器未被要求检查此类错误。

(2)、使用未初始化的变量有时候一访问就崩溃和报错,有时时对是错。

5、建议

如果不能确保初始化后程序的安全,每个内置类型的变量都进行初始化。

6、变量声明和定义关系

C++支持分离式编译(seqarate compilation)机制,允许程序分割为若干个文件,每个文件可被独立编译。为了支持分离式编译,C++将声明和定义区分开来。声明是为了让程序知道该名字,而定义是为了负责创建与名字关联的实体。

1 extern int i;//声明i而非定义i
2 int j;//声明并定义j

如果给由extern关键字标记的变量赋一个初始值,则抵销了extern的作用,将由原来的声明变成了定义。

1 extern double pi=3.1416;//定义

如果在函数体内部初始化一个有extern关键字标记的变量,将引发错误。变量只能被定义一次,但可以被多次声明。

7、静态类型变量:

C++是一种静态类型语言,在编译阶段检查类型,检查类型过程称为类型检查。编译器负责检查数据类型是否支持要执行的运算。

8、变量命名规范:

(1)、标识符要体现实际含义

(2)、变量名一般用小写

(3)、用户自定义的类名一般以大写字母开头,如Sales_item

(4)、标识符由多个单词组成,单词间要有明显的区分,如student_loan或studentLoan。