声明
这有一个与这个名字相关的东西,并且它是这个类型的,告诉编译器我要使用它,并期待它定义在某一个地方。
定义
定义是指提供所有必要的信息(占用内存大小),使其能够创建整个实体。
我们必须明白的:
一旦定义了也就是声明了,所以可以同时声明和定义一个函数、 类或者变量,但是不一定非得这样做。 定义一个函数意味着提供函数体;
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++中声明和定义的区别的更多相关文章

  1. [转载]C++中声明与定义的区别

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...

  2. 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...

  3. C\C++中声明与定义的区别

    声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...

  4. C++中声明与定义的区别

    如果是指变量的声明和定义: 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而 定义就是分配了内存.对于下面的两句代码:void Func(){in ...

  5. PHP中变量声明和定义的区别

    先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...

  6. C++ 变量的声明与定义的区别

    变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...

  7. C++之声明与定义的区别

    直接举例,在C++中,声明与定义的区别如下: extern int a;//若有extern关键字,则只是声明 int b;//若没有extern关键字,则为声明+定义 int a;//若之前已经声明 ...

  8. 【C++】C++中变量的声明与定义的区别

    声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变 ...

  9. 浅谈声明与定义的区别 分类: C/C++ 2015-06-01 15:08 157人阅读 评论(4) 收藏

    以下代码使用平台是VS2012. 清楚明白声明与定义是一名合格的程序猿的基本要求. 本人认为,C++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类 ...

随机推荐

  1. Ubuntu安装配置samba

    一. samba的安装: sudo apt-get insall sambasudo apt-get install smbfs 二. 创建共享目录: mkdir /home/chars/shares ...

  2. Easyui 遮罩实现方式

    项目中在提交Ajax请求时,后台处理数据时间有点长,需要一个遮罩,就随便找了一个实现一下:包含两种方式,个人比较喜欢第二种 第一种: $("#saveMaterial").clic ...

  3. css系列(5)css的运用(一)

        从本节开始介绍css配合html可以达到的一些效果.     (1)导航栏: <html> <head> <title>示例5.1</title> ...

  4. android 获取视频缩略图终极解决方案(ffmpeg)

    http://blog.csdn.net/u010499721/article/details/50338623 前些天有个师弟(在做一个仿LinkInEyes行车记录仪的app)问我怎么获取视频缩略 ...

  5. Android 使用OpenCV的三种方式(Android Studio)

    http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份,当时还是个菜 ...

  6. java常用日期操作方法

    package com.wujiangpo.test.util; import java.text.ParseException; import java.text.SimpleDateFormat; ...

  7. JavaWeb CSS

    1. CSS介绍 1.1. 什么是CSS CSS全称为Cascading Style Sheets,译为层叠样式表. 样式定义如何显示HTML元素. 样式通常存储在样式表中. 1.2. 百度百科 CS ...

  8. tree 命令【转】

    本文转载自:http://www.jb51.net/LINUXjishu/283874.html linux下怎么用tree命令以树形结构显示文件目录结构?tree命令可以以树形结构显示文件目录结构, ...

  9. Eclipse 换主题、皮肤、配色,换黑色主题护眼

    Eclipse写android代码时,默认的文本和框架都是白色,长时间使用,显得过于刺眼.这里介绍三种方法换黑色护眼配色. 1.系统设置里更改 2.从Eclipse Marketplace里下载主题 ...

  10. java assert的使用并深入解析Java的assertion

    java assert的使用并深入解析Java的assertion 分类: java2012-12-05 13:32 2020人阅读 评论(0) 收藏 举报 原文出处:http://blog.csdn ...