1、一个声明(条款7)将名字引入到一个翻译单元中,或是将已经由先前声明所引入的重声明名字引入到一个翻译单元中。一个声明指定了这些名字的解释和属性。
举个例子:
2、一个声明是一个定义,除非它声明了一个函数却没有指定函数体(8.4);或是它含有extern指定符(7.1.1)或连接指定符(7.5),并且该连接指定符既不包含一个初始化器,也不包含一个函数体;或是它在一个类声明中声明了一个静态数据成员(9.4);或者它是一个类名的声明(9.1);或者它是一个typedef声明(7.1.3);或是一个using声明(7.3.3);或是一个using指示符(7.3.4)。
这里要说明的是“连接指示符”就是extern "C"{}、extern "C++"{}这些。
3、以下代码既是声明又是定义:
以下代码仅仅是声明:
4、[注:在某些情况下,C++实现隐式地定义了默认的构造器(12.1)、拷贝构造器(12.8)、赋值操作符(12.8)或析构器(12.4)成员函数。例如给定:
实现将隐式地定义函数,使得结构C的定义等价与:
]
5、[注:一个类名也可以通过一个复杂类型指定符(3.3.1)而被隐式声明]
复杂类型指定符的语法定义如下:
(注:$opt表示$opt前面的一个token是可选的,即在某些情况下可省)
6、如果任一对象的定义把一个不完整的类型给了这个对象,那么这个程序是不良定义的(3.9)。