C++关键字之const

C++关键字之const

C中的const

C中const修饰只读变量,编译器在编译期间不知道其存储的内容。通常不为普通 const 只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作。

要想修改const修饰的变量的值, 可用volatile修饰。因为:
用volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

const可以修饰一般变量、数组、指针、函数参数、函数返回值。

C++中的const

C++中const关键字在C的基础上进行了扩展:修饰类的数据成员、修饰类的成员函数
使用要求如下:
1. const修饰类数据成员,必须在构造函数的初始化列表中初始化
2. const修饰类成员函数,实际修饰隐含的this,表示在类中不可以对类的普通成员(包括数据成员和成员函数)进行修改,可以对静态成员变量进行修改。
3. 若想要修改const修饰的成员函数对 某个数据成员进行修改,那么该数据的定义声明是必须加mutable关键字

class ClxTest
{
 public:
  ClxTest();
  ~ClxTest();
  
  void Output() const;
  int GetOutputTimes() const; 
  
 private:
  mutable int m_iTimes;
}; 

ClxTest::ClxTest()
{
 m_iTimes = 0;
} 

ClxTest::~ClxTest()
{}

void ClxTest::Output() const
{
 cout << "Output for test!" << endl;
 m_iTimes++;
} 

int ClxTest::GetOutputTimes() const
{
 return m_iTimes;
} 

void OutputTest(const ClxTest& lx)
{
 cout << lx.GetOutputTimes() << endl;
 lx.Output();
 cout << lx.GetOutputTimes() << endl;
}

计数器m_iTimes被mutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。

因为类也是一种类型, 所以const修饰的对象类似于const修饰的普通变量!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值