如何区分声明和定义?

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

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

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

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

string s; 

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

classTest
{
   string s1;
   string s2;
};

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

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

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

#include<iostream>

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

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

   return 0;
}

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值