C++声明和定义
2020-11-28 09:13
标签:style blog class code java ext 1
参考 2
概念 2.1
声明 2.2
定义 3
对比 3.1
声明但不是定义的情况 3.2
声明且是定义的情况 3.3
特殊情况 1. 《C++程序设计语言》4.9 2. 《C++Primer》2.3.5 3. http://bbs.csdn.net/topics/190026622
声明用于向程序表明变量的类型和名字。(引自参考2) 变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。 定义是声明,声明大部分是定义,少数情况不是定义。 声明 定义 非定义 定义 是否可以出现多次? 是 否 否 是否有内存分配? 没有 有 有 是否可以直接使用该变量? 不能 能 能 是否知道它的构成? 不一定知道 知道 知道
除了下面三种情况,声明全都是定义。
注意:如果对来自其他文件的变量进行初始化,那么这就是定义 这是个纠结的问题,我现在还没想明白,如果你知道请回复我,谢谢。 C++的作者认为 但是对于这种情况呢? 下面是关于声明与定义的帖子的一个回复以及我的观点,读者可以参考。 论坛上某人的回复如下。(引自参考3) 我的观点: C++声明和定义,搜素材,soscw.com C++声明和定义 标签:style blog class code java ext 原文地址:http://www.cnblogs.com/lovers/p/cpp_definition_decalartion.html目录
1. 参考
2. 概念
2.1 声明
2.2 定义
3. 对比
3.1 声明但不是定义的情况
3.1.1
声明来自其他文件的非初始化变量
extern int i; // 这是声明不是定义,变量i的定义在其他文件中
extern int i = 10; // 这是声明且是定义
3.1.2
声明类型
struct User; // 这是声明不是定义
3.1.3
声明方法
double _sqrt(double); // 这是声明不是定义
3.2 声明且是定义的情况
int i;
char ch;
string s;
int count = 1;
const double pi = 3.14;
const char *name = "Njal";
const char *season[] = {"spring", "summer", "fall", "winter"};
struct Date { int d, m, y; };
int day(Date *p) { return p->d; };
template
3.3 特殊情况
3.3.1 使用extern修饰变量,且初始化
extern int i = 10; // 这是定义
3.3.2 使用typedef
typedef compleshort> Point; // C++的作者认为这是定义
struct User; // 这是声明非定义 typedef User USER; // 这是不是定义呢?
3.3.3 类定义中的成员变量
struct Date
{
int y; // 这是定义
}
1. 变量和对象不加extern永远是定义,类中的除外.
2. 函数只有函数头是声明,有函数体是定义.
3. 类永远只是声明.类成员函数的函数体是定义.
class C
{
static int x;//这里的x是声明
static const int a;;//这里的a是声明
//非static变量在类定义对象时才分配内存.
C();//这里的函数是声明
};
int C::x;//这个才是定义
const int C::a=11;//这个才是定义
1. "变量和对象不加extern永远是定义"是片面的,例如特殊情况extern int i = 10就是定义。
"变量和对象不加extern永远是定义,类中的除外",我认为类中的变量和对象也是声明。
2. "函数只有函数头是声明,有函数体是定义.",我认为是正确的。
3. "类永远只是声明.类成员函数的函数体是定义.",我认为类永远都是定义。
class C
{
static int x;//这里的x是定义
static const int a;//这里的a是定义
C();//这里的函数是声明
};
int C::x;//这个是初始化
const int C::a=11;//这个是初始化