定义、声明区别
侯老师课程说,定义的结果是分配内存。
MSDN如下解释
声明将名称引入到程序中,例如变量、命名空间、函数和类的名称。 声明还指定了类型信息以及正在声明的对象的其他特征。 必须声明一个名称,然后才能进行使用;C++ 中在声明名称的位置确定其是否对编译器可见。 不能引用在编译单元中于之后某个时刻声明的函数或类;可以使用“前向声明”避开此限制。
声明将一个或多个名称引入程序中。 声明可以在一个程序中发生多次。 因此,可以为每个编译单元声明类、结构、枚举类型和其他用户定义的类型。 此多次声明的约束为所有声明必须相同。 声明还充当定义,除非声明:
-
是函数原型(没有函数体的函数声明)。
-
包含
extern
说明符,但不包含初始值设定项(对象和变量)或函数体(函数)。 这表明定义不一定在当前翻译单元中并提供名称外部链接。 -
是类声明中的静态数据成员。
由于静态类数据成员是类的所有对象所共享的分离变量,因此必须在类声明的外部对它们进行定义和初始化。 (有关类和类成员的详细信息,请参阅类。)
-
是没有下列定义的类名声明,例如
class T;
。 -
是
typedef
语句。
定义指定名称描述的代码或数据。 编译器需要定义,以为所声明的操作分配存储空间。
定义是对象、变量、函数、类或枚举数的唯一规范。 由于定义必须是唯一的,因此程序只能包含一个给定程序元素的定义。 声明和定义之间可存在多对一的对应关系。 在两种情况下,可声明但不定义程序元素:
-
声明函数,但决不将其与函数调用或采用函数地址的表达式一起引用。
-
只能通过无需知道其定义的方式使用类。 但是,必须声明该类。