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++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类 ...
随机推荐
- python基础26 -----python进程及协成
一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multipr ...
- VMware虚拟机NAT模式的具体配置
NAT模式的具体配置 NAT方式:虚拟机可以上外网,可以访问宿主计算机所在网络的其他计算机(反之不行). 1.1.1. 查看虚拟机的网络参数 1) 打开虚拟机,选择菜单&q ...
- Python之 Django 初级
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- sql中in和exists的区别效率问题 转
in 和exists in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询. 一直以来认为exists 比in 效率高的说法是不准确的.如果 ...
- 主攻ASP.NET.4.5 MVC4.0之重生:图书推荐
前段时间看完ASP.Net4.0 框架揭秘 ,目前现在此书在家睡大觉,看得云里雾里,实战有些东西用不上,感觉好可惜. 大概看了一下这本书,这本书很多功能,可以在实际项目中能用上的方法和技巧.小小推荐, ...
- 逐行读取txt文件并存入到数组中
get_file_contents_on_line.php $file = fopen("log.txt", "r"); $user=array(); $i=0 ...
- 发送ajax请求实现上传图片显示在网页上
<?php // 1,通过超全局变量来获取files[上传的图片名称] $file = $_FILES["files"] // 2,在通过strrchr来获取图片的格式 $e ...
- jack server 常见错误解决方法【转】
本文转载自:https://blog.csdn.net/qq_27061049/article/details/70156200 jack 服务常见错误解决方法 当你编译Android时,你不需要修改 ...
- mongodb 中的Multikey Index Bounds解释$elemMatch
首先说一下 $elemMatch的用法: { _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] } $elemMa ...
- mongodb count 导致不正确的数量(mongodb count 一个坑)
在mongodb 集群中,if 存在orphaned documents 和chunk migration, count查询可能会导致一个不正确的查询结果,例如我就是踩的这个坑,先不说话,看结果: ...