C++:const关键字的应用

终于搞明白了const的各种用法

const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
如果不想让编译器察觉到上面到对 const 的操作,我们可以在 const 前面加上 volatile 关键字。

Volatile 关键字跟 const 对应相反,是易变的,容易改变的意思。所以不会被编译器优化。

常见用法

  • 常变量: const 类型说明符 变量名
  • 常数组: const 类型说明符 数组名[大小]
  • 常指针: const 类型说明符* 指针名 ,类型说明符* const 指针名
  • 常引用: const 类型说明符 &引用名
  • 常对象: const 类名 对象名
  • 常量成员函数: 类名::fun(形参) const

const 修饰普通变量:常变量

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

const int a=10;

a 被编译器认为是一个常量,其值不允许修改。

const 修饰数组:常数组

const int a[3]={123};//定义一个常数组,则不能通过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
}

const 修饰指针变量:常指针

const 修饰指针变量有以下三种情况。

  • A: const 修饰指针指向的内容,则内容为不可变量。
const int *p = 8;
  • B: const 修饰指针,则指针为不可变量。

int a = 8;
int* const p = &a;
*p = 9; // 正确
int  b = 7;
p = &b; // 错误

  • C: const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。
int a = 8;
const int * const  p = &a;

对于 A,B,C 三种情况,根据 const 位于 * 号的位置不同,我总结三句话便于记忆的话:“左定值,右定向,const修饰不变量”。

const 修饰成员函数:常量成员函数:

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

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

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


参考:
https://www.runoob.com/w3cnote/cpp-const-keyword.html
https://www.cnblogs.com/pikapk/p/11521525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值