C++中声明和定义的区别
声明
这有一个与这个名字相关的东西,并且它是这个类型的,告诉编译器我要使用它,并期待它定义在某一个地方。
定义
定义是指提供所有必要的信息(占用内存大小),使其能够创建整个实体。
我们必须明白的:
一旦定义了也就是声明了,所以可以同时声明和定义一个函数、 类或者变量,但是不一定非得这样做。 定义一个函数意味着提供函数体;
void func() {};
定义一个类意味着给出类的方法以及成员;
class A {};
定义一个变量意味着告诉编译器变量的类型以及在程序的哪儿去创建这个变量;
int a;
默认声明一个变量,必须提供定义! 如何仅仅只去声明一个变量?请用extern!
extern int a; 仅仅只是声明变量而不去创建它
当extern修饰变量初始化式时,失去extern仅仅声明的效果,表示定义。
extern int a = ;
当extern修饰函数定义以及类定义时,同时也失去了extern仅仅声明的效果。 说道extern,我们来说一下C++中的storage classes
storage classes定义了C++程序中的变量、函数的作用域以及生命周期。
auto
所有局部变量的默认的storage classes
register
用于局部变量,声明该变量存储于寄存器中,对该变量不能用&取地址运算
extern
用于全局变量或者函数,声明该变量或者函数是全局可见的,告诉编译器该变量或者函数可以在程序的某个地方找到
static 用于全局变量或者函数,声明该变量或者函数是本编译单元可见(.o文件),不同的.o文件包含了名字相同的staic变量或者函数,会有不同的副本,编译不会出错;C++中,static还用于类中的数据成员和成员函数 局部变量默认是auto
非const全局变量默认是extern,const全局变量默认是static
所有变量默认声明就是定义
函数默认是extern 分析举例
int a; //声明即是定义
a是int类型的(声明);int类型占用4个字节(定义);
extern int a; //声明
a仅仅只是int类型的(声明) class A {int a;}; //声明即是定义
A是一个class类型的(声明);class A中有一个int成员a,占用4字节(定义);
class A; //声明
A是一个class类型的(声明);class类型不知道占用多少个字节,class是本地属性,只作用于本编译单元(.o文件),同一个编译单元(.o文件)不能有相同名字的class;不同的编译单元(.o文件)可存在不同的class,不会出现链接错误 A obj_a; //声明即是定义
obj_a是一个class A类型(声明);class A类型占用4个字节
extern A obj_a; //声明
obj_a仅仅只是class A类型;
C++中声明和定义的区别的更多相关文章
- [转载]C++中声明与定义的区别
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...
- 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...
- C\C++中声明与定义的区别
声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...
- C++中声明与定义的区别
如果是指变量的声明和定义: 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而 定义就是分配了内存.对于下面的两句代码:void Func(){in ...
- PHP中变量声明和定义的区别
先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...
- C++ 变量的声明与定义的区别
变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...
- C++之声明与定义的区别
直接举例,在C++中,声明与定义的区别如下: extern int a;//若有extern关键字,则只是声明 int b;//若没有extern关键字,则为声明+定义 int a;//若之前已经声明 ...
- 【C++】C++中变量的声明与定义的区别
声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变 ...
- 浅谈声明与定义的区别 分类: C/C++ 2015-06-01 15:08 157人阅读 评论(4) 收藏
以下代码使用平台是VS2012. 清楚明白声明与定义是一名合格的程序猿的基本要求. 本人认为,C++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类 ...
随机推荐
- "export" in SHELL
在shell中,若某一变量需要在随后的子程序中运行,则需要以 export 来使变量变成环境变量: export var export的用法总结: 1:一个shell中用export定义的变量,只对当 ...
- 学习小程序第三天 WXML语言特性
WXML语言特性 1.数据绑定 Musstache 语法 获取json中指定键值:变量名加双括号的绑定语法 如下: (1)绑定文本 注意所有组件和属性 都要小写 (2)绑定属性 ( ...
- BFC与边距重叠详解
1.什么是BFC? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位Box 是 CSS 布局的对象和基本单位, 直观点来说, ...
- Java public class 与 class 区别
在编写类的时候可以使用两种定义方式: public class 定义类 class 定义类 1.public class 定义类 如果一个类声明的时候使用了public class,则类名必须与文件名 ...
- Shell脚本实现SSH免密登录及批量配置管理
本节索引 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的PV量,上万台服务器.我们 ...
- Struts2的Action中访问servletAPI方式
struts2的数据存放中心为ActionContext,其是每次请求来时都会创建一个ActionContext,访问结束销毁,其绑定在ThreadLocal上,由于每次访问web容器都会为每次请求创 ...
- spark HelloWorld程序(scala版)
使用本地模式,不需要安装spark,引入相关JAR包即可: <dependency> <groupId>org.apache.spark</groupId> < ...
- java中的特殊有用类
1.MessageDigest:类似与md5加密算法应用的功能类
- 织梦dedecms 自带采集的缩略图地址后面有“/”斜杠的解决方法
本来想偷懒在网上找一些文档去解决织梦采集缩略图地址带“/”的问题的,可是找了找发现没有人写出解决方法,只好自己动手了. 过程很复杂,找了问题的原因也是找了半天,自己一点一点的测试.最后找到了问题所在. ...
- 生成 (web): 找不到目标 .NET Framework 版本的引用程序集;请确保已安装这些程序集或选择有效的目标版本。
刚刚还好好的,不知道修改什么了,突然出现如下错误: Default.aspx(36): 生成 (web): 找不到目标 .NET Framework 版本的引用程序集:请确保已安装这些程序集或选择有效 ...