C和C++中const的区别及C++ const详解_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C和C++中const的区别及C++ const详解

C和C++中const的区别及C++ const详解

 2012/5/5 12:44:41  Forrest_chen  程序员俱乐部  我要评论(0)
  • 摘要:CC++中const实在是一个令人头疼的关键字。const,顾名思义,就是常的意思,也就是不变的。用const修饰一个符号值,表示这个量是不变的。但是!真的是不变的吗?C语言中的const是可以变的!来看下下面这个程序吧:#include<stdio.h>intmain(){constinta=10;int*p=(int*)&a;*p=100;printf("%d\n",a);return0;}如果用GCC来编译上面程序,运行结果是100!如果用G++来编译的话,结果是10
  • 标签:详解 c++ 区别
C C++中const实在是一个令人头疼的关键字
const,顾名思义,就是常的意思,也就是不变的。
用const修饰一个符号值,表示这个量是不变的。
但是!真的是不变的吗?C语言中的const是可以变的!来看下下面这个程序吧:
#include<stdio.h>
int main(){
	const int a=10;
	int* p=(int*)&a;
	*p=100;
	printf("%d\n",a);
	return 0;
}

如果用GCC来编译上面程序,运行结果是100!如果用G++来编译的话,结果是10.也就是说,C中的const变量是可以通过一定的方式变相改变他的值得,但是C++在这方面做的比较好,或者说是比较合理,保持了它字面上的意思,不变!也许就是因为这个原因,C语言在定义数组时才不能用const量来指定数组大小吧。不过我在GCC上试验貌似是可以的,大概是已经根据新的标准编译器进行了改进,这里暂且不去管他吧。

再来看看另外一个区别。我们知道,在全局文件区域定义一个变量时,可以在另一个文件中使用它,因为他默认是extern的,但是如果加上了const修饰,那么C++中就无法在另一文件直接声明使用了,在程序链接阶段会报错。所以我们需要在定义const变量时显示声明为extern,可导出的。网上还有另外一种写法,即在const前用extern "C" 修饰。

现在来具体详细说说C++中的const吧。已经说了修饰变量,来说说如果修饰指针呢?
其实是一样的,你只要理解const修饰的到底是指针还是指针指向的值。例如:
const char* s;//s指向的值不变
char* const s;//s指针本身不变,即不能指向其他地址。
char const * s;//同1.

如果const常量在类中,就会有些特殊了。因为类中的变量不能直接赋值,而const却要求变量定义时就有值,那么,这个值就需要在类的构造函数参数初始化列表中进行赋值,在其他地方都会引起编译器不通过的现象。

普通变量和用const修饰的变量是不同的类型,所以,可以进行const重载
void func(const OBJ a){}
void func(OBJ a){}

这两个函数编译器不会报错,因为他们是属于不同类型。

再来看看const成员函数,也就是在函数参数列表后,函数体开始前加上const进行修饰的函数。可以对成员函数进行const重载。即:
class A{
void func()const{}
void func(){}
}

这样可以编译通过。

我理解这个可以重载的原因是这样的,C++类对象函数中都会默认传入一个this对象,这样,用const修饰就表示this是const的,所以该对象不能改变。

好了,先写到这里,以后看到有新的再补充吧。
上一篇: 2的N次方 下一篇: C++学习总结1
发表评论
用户名: 匿名