1、const、mutable与volatile的区别:
const表明内存被初始化以后,程序将不能对它进行修改。
volatile则表明,即使程序代码没有对内存单元进行修改,但是里面的值也可能会发生变化,是一种意想不到地被改变。例如:将一个指针指向某个硬件位置,其中包含了来自串行端口的时间和信息,在某些情况下,硬件而不是程序可能会修改其中的内容,或者两个程序可能相互影响,共享数据。该关键字的作用就是为了改善编译器的优化能力。假设编译器发现程序在几条语句中两次使用某个变量的值,则编译器可能不是让程序查找这个编码的值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在这两次使用之间不会发生变化。如果不将变量声明为volatile,则编译器将进行这种优化,否则,相当于告诉编译器,不要进行这种优化。比如:状态寄存器、多线程中几个任务共享一个变量等情况下使用volatile。
mutable表明即使结构或者类变量为const,其某个成员也可以被修改。例如:
struct data
{
char name[20];
mutable int access;

}

const data vari={"mutalble usage",0};
strcpy(vari.name,"abcederj"); //not allowed
vari.access++; //allowed

2、静态变量在整个程序执行期间都存在。
a、对于在函数外面定义的变量:其所属文件中位于该变量的定义后面的所有函数都可以使用它(文件级的作用域),并可在程序的其他文件中使用(外部链接性),而且另一个文件如果要使用这个变量,必须使用extern关键字来声明它。
b、对于文件共享的变量,应该在一个文件中不使用extern来包含其定义声明,并且在其他文件中使用extern来包含引用声明。
c、在函数的外面使用static定义的变量,其作用域是整个文件,具有内部链接性,即不能用于其他文件。
d、在代码块中定义的static变量,作用域是该代码块,即具有局部作用域和无链接性,但是在整个程序的执行期间,它都一直存在并且保持原来的值。
e、C++的函数默认为外部连接性,因此可以在文件之间共享,但是使用关键字static限定的函数的链接性是内部的,只在定义的文件中使用,而不能在其他的文件中使用。

所以,总结static的用法和区别如下:

一、static全局变量和普通全局变量的区别:(改变作用域,不改变生存期)

在全局变量(外部变量)的说明之前加上static就构成了静态的全局变量。全局变量本身就是静态的存储方式,静态的全局变量当然也是静态存储方式,二者在存储方式上没有区别。其主要区别就在于:非静态全局变量的作用域是整个程序,当一个程序是由多个源文件组成时,非静态全局变量在各个文件中都是有效的;而静态全局变量则限制了作用域,也就是只在定义该变量的文件中有效,而在同一个程序中的其他文件中不能使用。由于静态的全局变量的作用域局限于一个源文件中,只能为该文件的函数公用,因此可以避免在其他源文件中引起错误。static全局变量只初始化一次,以防止在其他文件单元中被引用。

二、static局部变量和普通局部变量的区别:(改变生存期,不改变作用域)

将局部变量改成static变量后,改变了其变量的存储方式,即改变了变量的生存期。将全局变量改成static变量后,不改变其变量的存储方式,即不改变变量的生存期,改变了变 量的作用域。static局部变量只初始化一次,下一次保持上一次的结果值。

三、static函数和普通函数的区别:

static函数和普通函数的作用域不同,只在当前文件中使用的函数应该说明为static,即只在本文件中进行说明和定义。对于可在当前文件以外使用的函数,则应该在一个头文件中进行说明,若要使用这些函数的源文件就需要包含这个头文件。static函数在内存中只有一份,而普通函数在每个被调用中维持一份拷贝。

3、在C++中,char数组名、指向char的指针和用引号括起来的字符串常量都被解释为字符串的第一个字符的地址。

C++之易混淆知识点一-----static详解的更多相关文章

  1. Java-web易混淆知识点整理

    Java-web易混淆知识点 post和get区别 post: 数据不会显示在地址栏 安全 大小无限制 可以提交二进制文件 get: 数据显示在地址栏 不安全 get方式提交有大小限制(约4kb) 相 ...

  2. php易混淆知识点

    一.define(“constant”,  “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...

  3. C++易混淆知识点整理

    // 1 /////////////////////////////////////////////////////////////////////// // 常量指针:,指针可修改,变量不可修改(只 ...

  4. CSS易混淆知识点总结与分享-定位与布局

    CSS定位有四种模式:static.relative.absolute.fixed,其它static是默认值,下面分别讲解下各自的特点: static:静态定位,处于动态布局流中,按照页面中的各元素先 ...

  5. 【PMP】易混淆知识点

    一.混淆概念 德尔菲技术 德尔菲技术是组织专家达成一致意见的一种方法.项目专家匿名参与其中.组织者使用调查问卷就重要的项目议题征询意见,然后对专家的答卷进行归纳,并把结果反馈给专家做进一步评论.这个过 ...

  6. C语言之数组与指针的易混淆知识点

    一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...

  7. C++之易混淆知识点二

    1.数据抽象与封装 数据抽象是一种接口和实现相分离的编程技术,设计者关心的是如何实现这些接口,而使用者仅仅知道这些接口,抽象地考虑这些接口做什么的就可以了,不必去考虑如何实现这一层次. 封装是将低层次 ...

  8. mysql易混淆知识点

    1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross  join        ...

  9. JavaScript易混淆知识点小回顾--数组方法与字符串方法;

    数组属性: arr.length;查看数组的长度 arr.Pop;删除数组最后一个元素; 数组的方法: arr.push();添加到数组末端; arr.shift();删除数组的第一个元素; arr. ...

随机推荐

  1. Vmware 安装samba

    samba是什么samba是什么?能干什么? samba 是基于SMB协议(ServerMessage Block,信息服务块)的开源软件,samba也可以是SMB协议的商标.SMB是一种Linux. ...

  2. sdwebimage缓存图片

    当使用SDWebImage时,如果用相同图片名的图片替换掉了原始缓存的图片,当再次请求的时候,还是使用的缓存图片,图片不会发生改变 原因:图片在NSCache中是以absolute url作为key存 ...

  3. POJ 3764 DFS+trie树

    题意: 给你一棵树,求树中最长的xor路径.(n<=100000) 思路: 首先我们知道 A xor B =(A xor C) xor (B xor C) 我们可以随便选一个点DFS 顺便做出与 ...

  4. ubuntu16.04 安装 docker

    1,切换到root 2,更新系统 # apt-get update 3,安装 https和ca证书 # apt-get install apt-transport-https ca-certifica ...

  5. USACO Sabotage, 2014 Mar 破坏阴谋(二分+贪心)

    一开始看完这题就有个想法: 只要把大于整个序列平均数的最大连续序列就是最优? 那把整个序列都减掉平均数 在做最大连续字序列和且记录长度? 仔细思考一下并不太对: 当子序列最大但长度较大 也许也比不上删 ...

  6. WEB前端开发常用的优化技巧汇总

    减少HTTP请求次数或者减少请求数据的大小 页面中每发送一次HTTP请求,都需要完成请求+响应这个完整的HTTP事务,会消耗一些时间,也可能会导致HTTP链接通道的堵塞,为了提高页面加载速度和运行的性 ...

  7. Android 实现调用系统拍照相册,剪切功能

    1.XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  8. SQL Server 检测到基于一致性的逻辑 I/O 错误

    背景:新建DB_GZN 恢复数据库备份文件 执行:          select * from VI_MPS_PAPLT 错误提示: 消息 824,级别 24,状态 2,第 2 行 SQL Serv ...

  9. dos命令,jdk&jre&jvm的关系,classpath和path区别

    Day01_SHJavaTraing_4-2-2017 一.学习方法 1.独立思考 2.独立整理.总结知识点 3.整理Exception报错文档 4.莫钻牛角尖 5.敲代码,敲,猛敲,死里敲 6.写代 ...

  10. Unity 动画系统(Mecanim) 术语及翻译 表格

    原文 翻译 Animation Clip 视频片段 Avatar 阿凡达 Retargeting 重定向 Rigging 绑定 skinning 蒙皮 Animator Component 动画组件 ...