C++关键字(static-register-atuo-extern-volatile-const)
转自:http://blog.163.com/fengxuedong_fxd/blog/static/71926306201173151854964/
下面关于C++的几个关键字是经常和我们打交道的而我们又经常对这些含糊不清的,本文根据自己的学习体会作以总结,以期达到真正理解和活用的目的。
static
l 静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可改变其值。
l 静态变量或静态函数,即只有本文件内的代码才可访问它,它的名字(变量名或函数名)在其它文件中不可见。
l 在函数体内生成的静态变量它的值也只能维持
int max_so_far( int curr )//求至今(本次调用)为止最大值
{
static int biggest; //该变量保持着每次调用时的最新值,它的有效期等于整个程序的有效期
if( curr > biggest )
biggest = curr;
return biggest;
}
l 在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。
l 类的静态成员变量必须在声明它的文件范围内进行初始化才能使用,private类型的也不例外。如,
float SavingsAccount::currentRate = 0.00154;
(注:currentRate是类SavingsAccount的静态成员变量)
register
l 用register声明的变量称着寄存器变量,在可能的情况下会直接存放在机器的寄存器中;但对32位编译器不起作用,当global optimizations(全局优化)开的时候,它会做出选择是否放在自己的寄存器中;不过其它与register关键字有关的其它符号都对32位编译 器有效。
auto
l 它是存储类型标识符,表明变量(自动)具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。
extern
l 声明变量或函数为外部链接,即该变量或函数名在其它文件中可见。被其修饰的变量(外部变量)是静态分配空间的,即程序开始时分配,结束时释放。用其声明的 变量或函数应该在别的文件或同一文件的其它地方定义(实现)。在文件内声明一个变量或函数默认为可被外部使用。
l 在C++中,还可用来指定使用另一语言进行链接,这时需要与特定的转换符一起使用。目前Microsoft C/C++仅支持”C”转换标记,来支持C编译器链接。使用这种情况有两种形式:
u extern “C” 声明语句
u extern “C” { 声明语句块 }
volatile
l 限定一个对象可被外部进程(操作系统、硬件或并发线程等)改变,声明时的语法如下:
int volatile nVint;
这样的声明是不能达到最高效的,因为它们的值随时会改变,系统在需要时会经常读写这个对象的值。 只常用于像中断处理程序之类的异步进程进行内存单元访问。
const
l const所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。在函数的声明与定义时都要加上const,放在函数参数列表的最后一个括号后。
l 在C++中,用const声明一个变量,意味着该变量就是一个带类型的常量,可以代替#define,且比#define多一个类型信息,且它执行内链 接,可放在头文件中声明;但在C中,其声明则必须放在源文件(即.C文件)中,在C中const声明一个变量,除了不能改变其值外,它仍是一具变量,如
const int maxarray = 255;
char store_char[maxarray]; //C++中合法,C中不合法
l const修饰指针时要特别注意。例:
char *const aptr = mybuf; // 常量指针
*aptr = 'a'; // Legal
aptr = yourbuf; // Error
const char *bptr = mybuf; // (指针bptr)指向常量数据
*bptr = 'a'; // Error
bptr = yourbuf; // Legal
l const修饰成员函数时不能用于构造和析构函数。
转载于:https://www.cnblogs.com/zmlctt/p/3690953.html
C++关键字(static-register-atuo-extern-volatile-const)相关推荐
- 【c语言】关键字存储类型讲解(auto,extern,static,register,const)
渣渣C的学习之路 用最简单的话,让你最快速明白! C语言中,每一个变量和函数都有2个属性:数据类型和数据的存储类别.C的存储类别有4种:自动的(auto).静态的(static).寄存器的(regis ...
- 关键字static、const、volatile的作用
关键字static的作用是什么?这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2. 在模 ...
- C语言——变量篇(一)变量关键字static、auto、extern、register
前言:笔者最近在看C语言时候遇到了一堆关键字,auto,static,extern,register等等.看上去头皮发麻,在这里整理一下,便于自己理解. 全局变量和局部变量 关于全局变量和局部变量,笔 ...
- C/C++关键字 static 和 const
C/C++关键字 static 和 const 一.关键字static 参考:https://www.cnblogs.com/BeyondAnyTime/p/2542315.html 1. 静态全局变 ...
- C语言中auto,register,extern,static【转】
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- (转) oc static extern 和const
static 全局的,可以改的,如果在一个类中声明static,类中其他地方用到的时候,也是使用的改变量.和java类似,但不能用类名直接访问. const 是常量,不可以改的 extern 1.假如 ...
- C语言关键字static与extern的详细解释
参考原文地址(static):https://blog.csdn.net/keyeagle/article/details/6708077 参考原文地址(extern):https://www.cnb ...
- OC中使用 static 、 extern、 const使用
static static用于定义静态变量,静态变量只会被初始化一次,并且直到程序销毁时才会释放 static NSString *str = @"asdfa"; const co ...
- 编程进阶,学会使用_I、_O、_IO,以及volatile const的意义
_I._O._IO在ST库里面的定义是: #define __I volatile const /*!< defines 'read only' permissions */ #define ...
- C++类的静态数据成员-关键字static
C++类的静态数据成员-关键字static 定义:用static关键字声明的数据成员称为静态数据成员. 每个类只有一个存储单元,静态数据成员为该类的所有对象共有,不属于某个对象.静态数据成员的初始化必 ...
最新文章
- android修改视频聊天帧率,Android基于腾讯云实时音视频仿微信视频通话最小化悬浮(4)...
- 技术01期:大规模图计算【基础篇】
- 华人Hbuy隐私政策
- linq 实现查询字符串拼接 : And 和 OR 两种方式
- python有道api-python 调用有道api接口的方法
- eclipse如何使用log4j详解,你get了吗???
- Exim4的简易部署
- Git之提示There is no tracking information for the current branch.
- windows获取系统补丁+匿名管道
- Nodejs教程09:实现一个带接口请求的简单服务器
- python9_Python9-前端基础知识-day47
- 【转】Odoo开发之:工作流 workflow
- 网上测试性格的软件依据是什么意思,(观点)mbti性格测试如此流行,它有科学依据吗?...
- Unity Excel转json且自动生成C#脚本
- LoadRunner教程(20)-LoadRunner 导出分析报告
- linux shell有哪些变量,Linux Bash Shell有关变量
- 游戏本怎么选?战神Z7T-DA7NP便宜又强悍,办公游戏两不误
- appdesigner生成exe文件并转移至不上网机
- 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名...
- 我是怎么在千氪上一天赚到5000氪金的?
热门文章
- SQL数据库每日自动备份
- 用AngularJS开发下一代Web应用pdf
- cocos2d-x3.0 关于CCAnimate 的一些资料
- HTTP 错误 500.23 - Internal Server Error
- 在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)...
- maven 加入第三方库_项目pom里引入第三方库的四个方法
- 临时切换淘宝源下载包
- Silverlight提示“Load 操作失败。远程服务器返回了错误: NotFound”
- 我只能说,Spring Data REST真的很燥辣
- 转 web 开发字体