5 回答
TA贡献1796条经验 获得超4个赞
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; // definition
template<>
int X<bool>::member; // declaration!
最后一个声明不是定义。它是静态成员的明确特化的声明X<bool>。它告诉编译器:“如果要实例化X<bool>::member,那么不要从主模板中实例化成员的定义,而是使用在别处找到的定义”。要使其成为定义,您必须提供初始化程序
template<>
int X<bool>::member = 1; // definition, belongs into a .cpp file.
TA贡献1877条经验 获得超6个赞
宣言
声明告诉编译器存在程序元素或名称。声明将一个或多个名称引入程序。声明可以在程序中多次出现。因此,可以为每个编译单元声明类,结构,枚举类型和其他用户定义的类型。
定义
定义指定名称描述的代码或数据。必须先声明名称才能使用它。
- 5 回答
- 0 关注
- 858 浏览
添加回答
举报