structA{ A(){}; staticint x; // declaration staticconstint y=11; // define // notice: non-const static data member must be initialized out of line }; int A::x=12; // define
一个类名字声明。
1
structA;
一个opaque-enum-declaration(没想好这个要咋翻译)
1
enumA:int;
一个模板形参(template parameter)
1
template<typename T> T f(T); //T is a decleration
函数声明中的形参声明
1
intfunc(int x);
一个typedef声明
1
typedefint INT;
一个别名(alias)声明
1
using INT=int;
一个using声明
1 2 3 4 5
namespace A{ typedefint INT; }
using A::INT;
一个static_assert声明
1
static_assert(foo());
一个属性声明
1
[[noreturn]] void funv();
一个空的声明
1 2
// empty-declaration: ;
一个using指令
1
usingnamespace std;
在以上的十几种情况中,声明不是定义。简单地说,“声明”就是提供名字和参数等一些原型信息,而“定义”则是提供存储空间分配和相应的实现。 额,写完才发现cppreference上已经有:Define and ODR,郁闷…