一个声明就是一个定义,除非:
它声明了一个没有具体说明函数体的函数;
它包含一个extern说明符,并且没有初始化程序或函数体;
它是一个类定义内的静态类数据成员的声明;
它是一个类名的声明;
它是一个typedef声明。
一个定义就是一个声明,除非:
它定义了一个静态类数据成员;
它定义了一个non-inline成员函数。
一个声明将一个名字引入到一个程序中;一个定义提供了一个实体(例如,类型、实例、函数)在一个程序中的唯一描述。
一个声明将一个名字引入作用域。在C++中,声明和定义的区别在于:在一个给定的作用域中重复一个声明是合法的;相比之下,在程序中使用的每个实体(例如,类、对象、枚举器、函数等)必须只有一个定义。例如:
以上都是声明,在单个作用域内可以重复多次。另一方面,下面这些在文件作用域中的声明也是定义,因此在一个给定的作用域内不能出现超过一次,否则就会触发一个编译时错误:
我们应该注意到,函数和静态数据成员声明是例外。它们虽然没有定义,但是在一个类的定义中也不能重复: