这是容易混淆的两个概念。简单点说,声明就是告诉编译器有这个名字,定义就真正的为它分配存储空间。 在《C++Primer》第四版 2.3.5节中这么说到:“变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。” 需要注意的是: 1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。 例如:
?View Code CPP1 2 extern int i; //声明,不是定义 int i; //声明,也是定义
2.如果声明有初始化式,就被当作定义,即使前面加了extern。 例如:
?View Code CPP1 extern double pi=3.1416; //定义
只有当extern声明位于函数外部时,才可以被初始化。
[...]

近期评论