首页 > 编程语言 > 详细

C++中const的应用

时间:2019-09-15 12:07:57      阅读:91      评论:0      收藏:0      [点我收藏+]

const常量相对与宏常量优势:

const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。

常见的const用法:

常变量:??const?类型说明符 变量名

常数组:???const 类型说明符?数组名[大小]??

常指针:??const?类型说明符* 指针名 ,类型说明符*?const?指针名

常引用:??const?类型说明符 &引用名

常对象:?const??类名?对象名

常量成员函数:??类名::fun(形参)?const

?

常变量:

? 取代了C中的宏定义,声明时必须进行初始化。

const int a=10;

常数组:

const int a[3]={1,2,3};//定义一个常数组,则不能通过a[0]=0形式对数组元素赋值

但通过const声明的常量变量只能保证不通过变量名修改变量的值,但可以通过其他方式修改变量所在内存的内容,比如指针。

int main(){
const int a[3] = { 1,2,3 };
int* p;
p = (int*)a;
*p = 0;
cout << a[0] << endl;//此时a[0]输出为0
}

常指针的两种含义:

? 使用指针时涉及到两个对象:该指针本身和被它所指的对象。

?
①char *const p; //p为指针常量,即指针为常量不能改变,指针指向的内容可改变

void func(int* const p){
int *pi = new int(100);
p = pi;//错误!P是指针常量。不能对它赋值。
}
int main()
{
int* p = new int(10);
func(p);
delete p;
return 0;
}

②char const *p1; //p1为常量指针,即指针指向内容为常量不可改变,指针可改变

void func(int const *p)
{
*p = 8;//错误!*P是常量,不能对它进行改变。
}
int main()
{
int* p = new int(10);
func(p);
delete p;
return 0;
}

常量与引用:

void func(const int& i)
{
i = 100;? // 错误,不能通过该引用改变对应内存的内容
}
int main()
{
int i = 10;
func(i);
return 0;
}

如果不希望函数的调用者改变参数的值,应该使用引用。

常量成员函数:

常量函数是C++对常量的一个扩展,它很好的确保了C++中类的封装性。在C++中,为了防止类的数据成员被非法访问,将类的成员函数分成了两类,一类是常量成员函数(也被称为观察者);另一类是非常量成员函数(也被成为变异者)。在一个函数的签名后面加上关键字const后该函数就成了常量函数。对于常量函数,最关键的不同是__编译器不允许其修改类的数据成员__。例如:

class Test
{
public:
void func() const;
private:
int intValue;
};
void Test::func() const
{
intValue = 100;//错误,不能修改类的数据成员
}

上面的代码中,常量函数func函数内试图去改变数据成员intValue的值,因此将在编译的时候引发异常,这大大提高了程序的健壮性。

C++中const的应用

原文:https://www.cnblogs.com/pikapk/p/11521525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!