C++学习 之 const的使用

1.const用于声明一个常量,这个量在代码中应该不能被更改。就像下面这样:

1
2
3
const float c = 3.14;
//You can not do this:
c = 10;//error!

  像上述这样的常量声明看上去这个常量非常的稳定且“坚固”,但实际上,我们可以做一件非常有趣的事情像下面这样:

1
2
3
4
5
6
const int c = 10;
int* a = new int;
a = (int*)&c;
a = 1;
std::cout<< b <<std::endl;
//results is 1

  非常有趣的事情发生了,指针a居然修改了常量c的值!我们通过引用c的值再获取c的地址的方式成功修改了c的值,引用类型强制转换成指针类型,这让我们成功的通过赋值让指向了c,这表明了在C++中的常量并不是完全无法更改的,他只是一种代码规则而不是程序规则。
2.const在C++的类中也有一些有趣的用法。
  同样的,在类中我们一样可以声明成员常量。但是不同于C的是,C++的成员函数可以赋予const的属性,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class entity
{
private:
int m_X;
public:
int Get_X() const
{
return m_X;
}
int Set_X()
{
m_X = 10;
}
};

  这样的函数类型让我们的函数禁用了修改成员变量的功能,成员变量对于这样的函数是只读的,同时对于常量的对象引用,只有这样的函数是可调用的(因为常量对象是不允许修改成员变量的,相应的就不允许调用普通的成员函数),如下:

1
2
3
4
5
void Get_Value(const entity e)
{
Get_X();//这样的函数是允许访问的
Set_X();//这样的则不可以
}

  当然,如果想通过const函数去操作变量,可以适应mutable操作符(或许是为了测试又或者别的原因,谁知道呢?)