C ++中有一些有趣的边缘情况(其中一些也在C中)。考虑T t;这可以是定义或声明,具体取决于类型T:typedef void T();T t; // declaration of function "t"struct X { T t; // declaration of function "t".};typedef int T;T t; // definition of object "t".在C ++中,使用模板时,还有另一种边缘情况。template <typename T>struct X { static int member; // declaration};template<typename T>int X<T>::member; // definitiontemplate<>int X<bool>::member; // declaration!最后一个声明不是定义。它是静态成员的明确特化的声明X<bool>。它告诉编译器:“如果要实例化X<bool>::member,那么不要从主模板中实例化成员的定义,而是使用在别处找到的定义”。要使其成为定义,您必须提供初始化程序template<>int X<bool>::member = 1; // definition, belongs into a .cpp file.