变量声明和定义的主要区别:

声明不分配存储空间,定义分配存储空间。

变量可以声明多次,但只能定义一次(一个变量只能在一个源文件中定义)

声明通常放在头文件(.h)中,定义放在源文件(.cpp)中

变量声明(纯声明,有extern关键字):

extern int i; //不分配存储空间

定义:

int i;       //无extern关键字,分配存储空间

extern int i = 1; //虽然有extern,但是变量被初始化,还是变量的定义

(变量的定义其实已经包含变量的声明,此处“定义”即为包含声明的定义,也可理解为变量定义必然包含一次声明)

区别变量声明和定义的方法:

变量声明:含有extern关键字且变量没有初始化

变量定义:不含extern关键字或者含有extern关键字但是变量被初始化

const变量和普通变量(为文件中的全局变量的情况):

普通变量默认为extern属性(即该变量可以在定义该变量的文件之外的文件使用,是所有源文件的全局变量,前提:该变量在另一个变量中被声明);

const变量默认不含extern属性(即该变量默认为定义该变量的文件的变量(只能在该文件中使用),只是该源文件的全局变量)

头文件通常包含变量的声明,类的定义,const变量的定义

(注:不能包含普通变量的定义,由于普通变量默认为extern属性,也就是所有文件的全局变量,当多个文件同时包含该头文件时,该普通变量会被重复定义,编译出现错误;但是头文件可以包含const变量的定义,由于const变量默认不含extern属性,即cosnt变量只是定义它的那个文件的全局变量,所以当多个文件同时包含该头文件时,cosnt变量不会被重复定义;简而言之,含extern属性的变量不能被多个文件重复定义;不含extern属性的变量可以被多个文件重复定义,相当于每个文件自己定义了一个只属于该文件本身的全局变量)

const变量也可被显式地定义为extern变量,即extern const int i = 1; 此时该const变量拥有extern属性。

c++变量声明、定义,const变量的更多相关文章

  1. 转:MySQL中变量的定义和变量的赋值使用(转)

    MySQL中变量的定义和变量的赋值使用(转)   说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin...end块中,而普通的变量定义和使用都说的比较 ...

  2. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  3. 变量声明---let,const,解构

    let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题. const是对let的一个增强,它能阻止对一个变量再次赋值. 块作用域 当用let声明一个变量,它使用的是 ...

  4. ES6系列之变量声明let const

    ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2 ...

  5. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  6. C++ 变量声明 定义 作用域 链接性总结

    变量定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 变量声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只能定义一次. 变量的类型 ...

  7. MySQL中变量的定义和变量的赋值使用(转)

    说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin...end块中,而普通的变量定义和使用都说的比较少,针对此类问题只能在官方文档中才能找到讲解. 前 ...

  8. ES6中声明变量 let和const特点

    在ES6中我们有两种定义变量的方式:let    const let特点: 1.let定义时不会进行变量声明提升 2.变量不允许被重复定义 3.变量不可以被删除 4.在for循环当中用let定义i 循 ...

  9. 变量声明和定义的关系------c++ primer

    为了允许把程序分成多个逻辑部分来编写,c++语言支持分离式编译机制 为了支持分离式编译,c++语言把声明和定义区分开来.声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名 ...

随机推荐

  1. 【转】每天一个linux命令(33):df 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/07/2806483.html linux中df命令的功能是用来检查linux服务器的文件系统的磁盘 ...

  2. ORA-25205: the QUEUE SYS.KUPC$S_1_20180123193821 does not exist

    [oracle@hbjfdba:/oratmp]#expdp \'XXX as sysdba\' DIRECTORY=TMP_DUMP_DIR DUMPFILE=NEW_LOCAL_HB_DMN_%U ...

  3. net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.util.Map

    public static void main(String[] arg0) { String reString = "{" + "\"code\": ...

  4. Python——包

    包 —— 把解决一类问题的模块放在同一个文件夹里 包的导入 import 和 from ... import 都行 导入之前:凡是带点的,点的左边都必须是包 导入之后:点的左边可以是包.模块.函数.类 ...

  5. MySql数据库中敏感字段加密处理方案

    比如数据表中有一个手机号码字段是敏感字段,不想明文存储,可以是用MySQL的自带的函数处理 Table 12.17 Encryption Functions Name Description AES_ ...

  6. 【jmeter】jmeter之-断言和检查点

    断言就类似LoadRunner中的检查点.对上一个请求返回的信息,做字符串.数据包大小.HTML.XML.图片等做判断,确保返回的信息的准确性. 简单的来理解一下,上一章讲到,我们对用户名和密码进行了 ...

  7. Linux基本操作命令及作用

    文件和目录操作命令 命令 作用 cd change directory,切换目录 cp copy,其功能为复制文件或目录 find 用于查找目录或文件 mv move ,移动或重命名文件或目录 pwd ...

  8. Web(click and script) 与 Web(HTTP/HTML)协议区别

    先从最简单的说明上来看, Web(HTTP/HTML):       Emulation of     communication between a    browser and Web Serve ...

  9. 杂项:Nuget

    ylbtech-杂项:Nuget Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基于.NET Framework的应用时,Nug ...

  10. Monit安装与配置

    Monit安装与配置 monit 监控并自动重启服务 官方文档