const和static的用法

关于const:
    这一点在很多经典的关于C 和C++的书籍中是必谈的要点。在《Exceptional C++》一书中,对这点有很精彩的描述,现摘录如下:“没有正确的安全意识的枪手在世界上是不可能活的很长的。const 观念不正确的程序员也是一样和没有时间戴紧帽子的正确,没有时间检查带电电线的电工一样不会活的很长。”在C 语言中,const 修饰符表示告诉编译器此函数将不会改变被修饰的变量的指向的任何值(除了强制类型转换)。当把指针作为参数传递时,总是合适地使用const,不仅可以防止你无意中错误的赋值,而且还可以防止在作为参数将指针传递给函数时可能会修改了本不想改变的指针所指向的对象的值。如: 
const int num= 7;
num = 9; //有/可能得到编译器的警告。
const char *ptr,则表示该指针所指向的内容不会被改变,如果在程序中被发生对其赋值的操作,编译时将出错误提示。如:
const char *ptr = “hello”;
*ptr = 'H';//错误,所指内容不可改变也可将const 放在星号后面来声明指针本身不可改变。如:
char* const ptr;
ptr++; //错误,指针本身不可改变

也可同时禁止改变指针和它所引用的内容,其形式如下: const char* const ptr;


关于static:
    static 是一个能够减少命名冲突的有用工具。将只在一个模块文件中的变量和函数使用static 修饰,将不会和其他模块可能具有相同名称的函数和变量在模块连接时不会产生名称冲突。一般来说,只要不是提供给其它模块使用的函数,和非全局变量,均应使用static 修饰。将子程序中的变量使用static 修饰时,表示这个变量在程序开始时分配内存,在程序结束时释放,它们在程序执行期间保持它们的值。如:
void func1(void)
{
static int time = 0;
time++
}
void func2(void)
{
static int time = 0;
time++;
}
两个子程序中的time 变量使用static 修饰,所以它们是静态变量,每调用一次time将进行加1,并保持这个值。它们的功能与下面程序相似:
int time1 = 0;
int time2 = 0;
void func1(void)
{
time1++
}
void func2(void)
{
time2++;
}

我们可以看出,使用static 修饰后,模块中的全局变量减少,使得程序的更为简单。


总结:

const就是只读的意思,只在声明中使用; 
static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; 
对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. 
static const 应该就是上面两者的合集. 
下面分别说明: 
全局: 
const,只读的全局变量,其值不可修改. 
static,规定此全局变量只在当前模块(文件)中可见. 
static const,既是只读的,又是只在当前模块中可见的. 
文件: 
文件指针可当作一个变量来看,与上面所说类似. 
函数: 
const,返回只读变量的函数. 
static,规定此函数只在当前模块可见. 
类: 
const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用) 
static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同

const就是只读的意思,只在声明中使用; 
static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; 
对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. 
static const 应该就是上面两者的合集. 
下面分别说明: 
全局: 
const,只读的全局变量,其值不可修改. 
static,规定此全局变量只在当前模块(文件)中可见. 
static const,既是只读的,又是只在当前模块中可见的. 
文件: 
文件指针可当作一个变量来看,与上面所说类似. 
函数: 
const,返回只读变量的函数. 
static,规定此函数只在当前模块可见. 
类: 
const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用) 
static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值