昨天简单谈了一点变量定义形式,以及各个部分的意义与功能,今天就接着昨天的话题继续吧。
一.关于初始化
初始化主要采用以下两种:
(1)直接初始化
(2)复制初始化
形式如下:
int a(6); //直接初始化(推荐使用)
int b = 6; //复制初始化
二者的功能相同,都是在定义变量时给与一个初值。而这个初值的形式可以有多种形式:
#include<iostream>
int csh() //定义一个返回值为6的函数
{
return 6;
}
int main()
{
int a(6); //定义一个初值为6的变量a
int b=6; //复制初始化,初值为6
int c(a); //直接初始化,以a作初值,即6
int d=csh(); //复制初始化,以函数返回值作初值
int e=a+csh(); //复制初始化,以计算式结果为初值
return 0;
}
当我们在定义一个需要使用的变量时,最好是人为初始化,不要过分依赖编译器调用的默认构造函数,容易引起数据混乱,甚至在一些比较老的编译器中会被判作不合法。
在C++11标准中,初始化的方式还有列表初始化等。也正因为初始化的多样性,使得初始化的问题比较复杂,目前暂不作深究,待之后再细谈。
二.关于定义与声明
(1)什么是声明?
首先需要了解,C++语言支持分离式编译机制,就是将程序分为多个逻辑块编写,然后进行相对独立的编译。这个时候,分离的一部分程序若要用到其他程序的变量或函数等,则要进行声明,在声明后,则可在当前部分程序使用其它部分程序的内容。由于对象的作用域限制,跨程序声明并使用的变量必须是全局变量。
在代码量比较庞大、逻辑结构相对复杂的情况下,声明的作用将得到一定的体现。
(2)声明的形式:在主函数外进行声明:extern(关键字)数据类型 变量名
extern int a;
(3)声明与定义的区别:
#include<...>
...
int a=6; //定义,创建int型变量a,并初始化为6
extern int b; //声明,未创建变量
extern int c = 6; //定义,声明时不能进行初始化操作
int main()
{
......
}
由上方代码可推出:
定义的过程是开辟一个对应类型的的空间,将这个空间命名(变量名),并在这个空间中对变量进行操作;
而声明的过程只是借用了在其他地方创建的变量,并没有开辟空间进行操作等。一但有了实际操作(初始化等),即便有了关键词extern,这条语句也将被归属于定义。但是在定义时最好不要写extern关键字,即便编译通过,也容易引起理解混乱。
需要注意的是,变量只能定义一次,而却可以被多次声明。