const常量存在于程序的数据段,并在堆栈中分配了空间。const 常量是一个RUN-Time的概念,它在程序中确实的存在着并可以被调用、传递。
const的作用:
1 const用于定义常量:const定义的常量编译器可以对其进行数据静态类型安全检测。
2 const修饰函数形式参数:当输入参数为用户定义类型和抽象数据类型时,将“数传递”改为“const&传递”可以提高效率。
如:
void fun(A a);
void fun( A const & a);
第二个函数的效率高,因为其减少了第一个函数存在的临时对象的构件、复制、析构过程都将消耗时间。其不用产生临时对象。
3 const修饰函数的返回值:如果给“指针传递”的函数返回值加const,则返回值不能直接修饰,
且该返回值只能被赋值给const修饰的同类型指针。
如:
const char*GetChar(void){};
char*ch=GetChar(); //error
const char*ch=GetChar(); //correct
4 const 修饰类的成员函数(函数定义体):任何不需要修改数据成员的函数都应该使用const修饰,
这样即使不小心修改了数据成员或调用了非const成员函数,编译器也会报错。
如:
int GetCout(void) const;
#include<stdio.h>
int main()
{
const int x=1;
int b=10;
int c=20;
const int *a1=&b; //常量指针
int *const a2=&b; //指针常量
const int *const a3=&b;
x=2; //错,x为常量。
a1=&c; //对,a1为常量指针,其所指:指向常量的指针,指针所指向的内容不能改变,但是可以改变其所指向的地址。
*a1=1; //错,指针指向的值被改。
a2=&c; //错,指针是常量,其一旦确定了,就不能再改变。
*a2=1; //对,其指向的地址虽然不能变,但地址所代表的内容,可以改变。
a3=&c; // 错。
*a3=1; //错。
return 0;
}