C++之易混淆知识点一-----static详解
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详解的更多相关文章
- Java-web易混淆知识点整理
Java-web易混淆知识点 post和get区别 post: 数据不会显示在地址栏 安全 大小无限制 可以提交二进制文件 get: 数据显示在地址栏 不安全 get方式提交有大小限制(约4kb) 相 ...
- php易混淆知识点
一.define(“constant”, “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...
- C++易混淆知识点整理
// 1 /////////////////////////////////////////////////////////////////////// // 常量指针:,指针可修改,变量不可修改(只 ...
- CSS易混淆知识点总结与分享-定位与布局
CSS定位有四种模式:static.relative.absolute.fixed,其它static是默认值,下面分别讲解下各自的特点: static:静态定位,处于动态布局流中,按照页面中的各元素先 ...
- 【PMP】易混淆知识点
一.混淆概念 德尔菲技术 德尔菲技术是组织专家达成一致意见的一种方法.项目专家匿名参与其中.组织者使用调查问卷就重要的项目议题征询意见,然后对专家的答卷进行归纳,并把结果反馈给专家做进一步评论.这个过 ...
- C语言之数组与指针的易混淆知识点
一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...
- C++之易混淆知识点二
1.数据抽象与封装 数据抽象是一种接口和实现相分离的编程技术,设计者关心的是如何实现这些接口,而使用者仅仅知道这些接口,抽象地考虑这些接口做什么的就可以了,不必去考虑如何实现这一层次. 封装是将低层次 ...
- mysql易混淆知识点
1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross join ...
- JavaScript易混淆知识点小回顾--数组方法与字符串方法;
数组属性: arr.length;查看数组的长度 arr.Pop;删除数组最后一个元素; 数组的方法: arr.push();添加到数组末端; arr.shift();删除数组的第一个元素; arr. ...
随机推荐
- 如何让MP4 video视频背景色变成透明?
本文转自:https://www.zhangxinxu.com/wordpress/2019/05/mp4-video-background-transparent/ 亲测,pc端有效,但移动端微信内 ...
- 10. Regular Expression Matching[H]正则表达式匹配
题目 Given an input string(s) and a pattern(p), implement regular expression matching with support for ...
- 限制input 内部字数
当输入字数多于限定值后,输入框显示不出来多出的字符 对于input来说,innerHTML 不能查询和更改,只能用value 来 size 属性规定输入字段的宽度 size 属性定义的是可见的字符数 ...
- 一个基于React整套技术栈+Node.js的前端页面制作工具
pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...
- CREATE TABLE 语句后的 ON [PRIMARY] 起什么作用
CREATE TABLE [dbo].[table1] ( [gh] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ...
- WCF(二)配置文件
上篇文章中对WCF的配置放到App.config中,这样可以使程序更灵活.更具有扩展性. 下面说下配置文件中各个节点的含义. 服务端: WCF配置文件节点放在<system.serviceMod ...
- win7(32位)旗舰版共享HP1010打印机给WINXP专业版
一.状况: 两台电脑,同一网段内,电脑A是WIN7系统(32位),电脑B是WINXP系统. ①电脑A(win7)已经安装完打印机驱动,能正常打印,对该打印机HP1010共享时,提示“无法保存打印机设置 ...
- 阿里云大学Linux学习路线图(学+测)重磅上线!
推荐:阿里云大学—Linux运维学习路线(点击获取免费课程) 全新“学+测”模式 每阶段包含初.中.高三个难度等级考试,学完即测,找准短板,助您全方位自测掌握程度 课程系统全面 课程体系涵盖从Linu ...
- Pyhton学习——Day23
#re模块方法:findall search#findall:返回所有满足匹配条件的数值,放在列表里#search : #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象 ...
- UVA340-Master-Mind Hints(紫书例题3.4)
MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, Break ...