C++ 语言const与C语言的对比
在<C++ 语言对C语言的增强(一)>中,讲解了(1)C++ 的实用性增强(2)变量检测增强(3)C++中所有变量和函数都必须有类型(4)struct 类型增强;详情请点击
http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87326&fromuid=324757
在< C++ 语言对C语言的增强(二)>中,我们讲解了(1)新增的bool运算符;(2)三目运算符的增强;(3)C++中真正的枚举。详情请点击<请编辑老师放入上次的链接>。今天我们来看一下C++中const与C语言中的不同。
- 什么是const?
const是一个C语言(ANSI C)的关键字,它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、B#.net、HC08 C、C#。(以上解释来自百度百科)
- Const的基本用法
const int a;
int const b;
//第⼀个第⼆个意思⼀样 代表⼀个常整形数
const int *c;
//第三个 const 修饰的 *c,即c是⼀个指向常整形数的指针(所指向的内存数据不能被修改,但是本⾝可以修改)
int * const d;
//第四个 const修饰的是d,即d为常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
const int * const e ;
//第五个 第一个const修饰的是*e,则*e的值,即所指向的内存数据不能修改,第二个const修饰的e,即e的指向不能修改,所以e是 ⼀个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改) |
不知道以上的基础用法,你明白了吗?(ps:不明白的话,再看三遍)下面就来看看C语言中的const吧。
- C语言中的冒牌const
什么?你说你不相信,const还有冒牌,不相信就来看看下边的代码吧
#include <stdio.h>
int main()
{
const int a = 10;
int *p = &a;
printf("a===>%d\n", a);
*p = 11;
printf("a===>%d\n", a);
return 0;
} |
以上代码在C语言编译器中的运行结果为:
怎么样,用const定义的a;就这样被改变了,这足以说明C语言中的const是”冒牌货”了吧!
再看看同样的代码在C++编译器中运行的结果:
直接报错了有没有,这才是真正的const吧。什么,你说来个强转,将const int* 强转为const 就可以了,那咱们看代码吧!
强转之后是不报错了,但是你看,a的值被改变了吗?没有吧,还不信你就自己写个代码,运行下试试吧!
- Const和#define的区别
#include <iostream>
void fun1()
{
#define a 10
const int b = 20;
}
void fun2()
{
printf("a = %d\n", a);
//printf("b = %d\n", b);
}
int main()
{
fun2();
return 0;
} |
通过这段代码你发现什么了吗?
在fun1函数中通过#define定义的a在fun2函数中可以使用,而通过const定义的b则不能在fun2中使用,这是为什么呢?你明白吗?
这是因为#define 宏定义发生在预处理阶段,只是简单的类型转换,不做语法检查和变量作用域检查,而const常量则发生在编译阶段,会进行语法检查和变量作用域检查,而变量b在fun1中定义,只在fun1中可用,在fun2函数中不能使用。
- Const的好处
合理的利用const修饰变量的好处:
1)指针做函数参数时,用const修饰表明是只读,即不可修改参数的值,可以有效的提高代码可读性,减少bug;
2)可以清楚的分清参数的输入和输出特性
今天的讲解就到这里了,如果想了解更多的知识,请持续关注我们的论坛。
本文版权归传智播客C++培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客C/C++培训学院
首发:http://www.itcast.cn/c/