如何区分声明和定义

floor 8

变量和对象不加extern永远是定义,类中的除外.

函数只有函数头是声明,有函数体是定义.
类永远只是声明.类成员函数的函数体是定义.
class C
{
static int x;//这里的x是声明
static const int a;;//这里的a是声明
//非static变量在类定义对象时才分配内存.
C();//这里的函数是声明
};

int C::x;//这个才是定义

const int C::a=11;//这个才是定义

floor 11

"声明"的严谨C++语意,是用以告诉编译器类型及其细节,例如:

class fish6344
{
    //数据成员细节...
    //成员函数细节...
};

上述声明仅告诉编译器有自定义类型fish6344,编译器仅对其进行语汇分析及名字的决议,并无内存实际佔有!

"定义"的严谨C++语意,即内存佔有,编译器将在相对内存地址上为其对象定址!要注意的是,我们不能简单的说:

string s; 

是声明或是定义,应视具体情况而定,原则是,如果有内存的实际占有可确定是定义,否则是声明。例如:

class fish6344
{
   string s1;
   string s2;
};

上述fish6344类是个声明,并无内存占有(未实例化),s1及s2都是string型变量的声明而不是定义,fish6344都没有实体(可以为是虚幻的),哪儿有其成员的内存位置呢?只有实例化fish6344类以后,才会有内存占有。例如:

fish6344 _fish;//在对象实体_fish中有s1及s2的内存占有!

但是上述关于s1及s2的语句放在全局作用域或是另一实体的局部作用域,例如:

#include<iostream>

//全局作用域的:
string s2;//这是定义,s2是实例化的string!

int main()
{
   //Main函数体内的:
   string s1;;//这是定义,s1是实例化的string!

   return 0;
}

二个string语句都是定义,这是典型的类型实例化!

转自:http://bbs.csdn.net/topics/190026622

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值