c++ const关键字

前言

c++中const的运用十分灵活,他改善了程序的健壮性,他是c++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型。


一、const的作用?

const成员变量:只能在初始化列表中初始化

例:

class A
{
public:
  A(int _x) : x(_x) {}   //const成员变量只能在初始化列表初始化

   const int x;
};

 const成员函数:防止成员函数修改非静态成员变量的值,const成员函数可以修改静态成员变量。

例:

class Box
{
public:
   Box(int w) : width(w){}   //初始化列表初始化成员变量
   
   int getWidth() const;     //const函数声明
   void setWidth(int w);
   void showBox();

   static int x;   //静态成员变量
   int width;      //非静态成员变量
};

int Box::x = 10; //静态成员函数变量初始化

void Box::showBox()
{
  cout << width << endl;
}

void Box::setWidth(int w)
{
  width = w;
}

int Box::getWidth() const
{
   x = 5;
   width = 10;  // 错误写法   const函数无法修改非静态成员变量
   setWidth(10); //错误写法   const函数无法调用非const函数
   showBox();   // 错误写法   const函数无法调用非const函数
    
   return width;
}

二、将const类型转化为非const类型的方法

采用const_cast 进行转换。 
用法:const_cast <type_id>  (expression)
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。

·             常量指针被转化成非常量指针,并且仍然指向原来的对象;

·             常量引用被转换成非常量引用,并且仍然指向原来的对象;

·             常量对象被转换成非常量对象。

三,使用const的建议

·             要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;

·             要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;

·             在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;

·             const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;

·             不要轻易的将函数的返回值类型定为const;

·             除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

·             任何不会修改数据成员的函数都应该声明为const 类型。
 

总结

1.    一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对 某个对象引用的情况。原因如下:如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少 用到。  
2.      如果给采用“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
3.    函数返回值采用“引用传递”的场合不多,这种方式一般只出现在类的赙值函数中,目的是为了实现链式表达。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值