const ,static 和 volatile
来源:互联网 发布:js 获取元素父节点 编辑:程序博客网 时间:2024/05/22 13:57
在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变,且在下次调用这个函数时,其静态变量维持上次调用时的值。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
const关键字总结:
1用于声明常量:
int const a;
const int b;
2用于函形式参数声明中,由于const常量的只读性质,这基本等同于标明在此函数中不会修改这个参数。
int add(const int p1, const char p2)
{
return p1+p2;
}
3与指针类型的组合
const对一个指针类型有2种可同时使用的修饰方式,一是指针指向的对象是const的(对象状态不能改变),另一种是指针本身是const的(指针指向的目标不变,指针保存 的地址不变)2种修饰可以同时使用
const char* p1 //对象状态不变
char *const p2 //指针目标不变
const char* const p3 //二者都不变
char const*const p4 //同上
4用于成员函数声明和定义中 (稍微有点复杂 )
需要注意的一点是有const后缀和无const后缀的同名同参数列表成员函数是2个不同的重载。当对象具有const特性时调用它的成员方法就是对const成员方法的呼叫,对象不是const的时候就是对无const成员函数的呼叫。这是外部调用时const对成员函数的影响。
在实现const成员函数时,不能访问对象的非const成员(包括成员变量和函数),这实际上是在保证一个const后缀的成员函数不会改变对象的状态。如果某个非const的成员变量需要在const成员函数中访问,就在此变量前使用mutable关键字。还有一个细节,const成员函数中隐含的this指针是const T*类型的,通过const类型的指针是不能修改对象状态的,这从另外一个更接近编译器的角度理解了const后缀的成员函数。
volatile关键字:
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
- const ,static 和 volatile
- static、const和volatile的作用
- volatile、static、register、extern、auto和const
- const,static,extern,volatile
- 关键字static,const,volatile
- const,volatile,enum,static
- static,const,volatile
- 关键字:static,const,volatile
- static const volatile
- C++关键字static、const和volatile的几点说明
- Volatile/Static/Const/mutable/extern
- auto, static, register, const, volatile
- Static,Const,Volatile面试解答
- static const volatile register使用
- 关键字static、extern、volatile 、const
- C-static,const,volatile,extern
- const static volatile的作用
- struct,typedef,volatile,const,static
- 计算机视觉及多媒体相关conference&journal评级
- android访问远程数据库
- POJ-2823-Sliding Window
- POJ搜索题目汇总
- 敏捷开发价值观和原则
- const ,static 和 volatile
- 计算几何:两圆相交面积
- public static Long ascByteToLong
- Oracle所谓的不区分大小写是指oracle的命令,表名,列名等直接输入的内容,Oracle会将其全部转化为大写。
- 内存池实现
- 内存池实现(2)
- 学习需要方法
- 通过RMAN进行数据库恢复(step by step)
- 新白娘子传奇