无论是在C或者C++中,我们常常把声明和定义给弄混淆了,分不清楚,天真的认为这个两个东西是没有任何的区别,但是其实不以为然。下面我们来简单的阐述这两者的区别。
-
何为声明(declaration)?
声明的英文名为declaration。 C/C++ 中使用声明时,仅仅是告诉编译器某个东西的类型和名称,不分配实际的内存空间,不提供存储的位置和具体实现的细节。extern itn x; // 变量声明 std::size_t func(int num); // 函数声明 class Widget; // 类声明 template<typename T> // 模板声明 class Student; -
何为定义(definition)?
定义的英文名为definition, C/C++ 中使用定义时,编译器要给变量分配实际的内存空间,提供存储的位置和具体实现的细节。int x; // 对象定义,编译器为对象分配内存;此处对象非面向对象中的对象 // 对function 或function template而言,定义提供了代码的本体 std::size_t func(int num) { std::size_t a; return (a + 10); } // class 定义 class Widget { public: Widget(); ~Widget(); ...... }; // 模板定义 template<typename T> class Student { public: Student(); ~Student(); };- 注意:在程序中变量可以有
多次声明,但只能定义一次。
- 注意:在程序中变量可以有
-
签名(signature)
- C++ 官方定义中,签名就是函数的参数部分,不包括函数的返回类型。但习惯上一般把函数返回类型和参数都作为签名的部分。
- 例如函数声明中
std::size_t func(int num);,func 函数签名为std::size_t和int
本文详细阐述了C++和C语言中声明(declaration)、定义(definition)和签名(signature)的概念及区别。声明仅告知编译器变量或函数的类型和名称,不分配内存;定义则会分配内存并提供实现细节。在C++中,签名通常指函数的参数列表,但通常也包括返回类型。
5594

被折叠的 条评论
为什么被折叠?



