c++关键字:const mutable volatile

未经授权,禁止转载!创作不易,尊重原创!~~

const

const,顾名思义,就是常量,表示修饰的目标不能被改变。这些目标主要包括变量,指针,函数,类。下面针对这四个目标对象进行不同的说明。

场景1: 修饰变量

const修饰变量,不论是放在数据类型前还是放在数据类型后,都表示一个意思,该变量是一个常量。

const T variable_name;
T const variable_name;

场景2: 修饰指针

const修饰指针有两种情况,分别对应于const在指针的两侧:

casecode意义
const在指针的左侧const T* ptr = …表示指针指向一个常量,指针可以其他的常量
const在指针的右侧T* const =…表示指针是一个常量,只能指向某一个固定的变量

NOTE:
一个普通的指针不能指向一个常量的地址。因为普通的指针可以修改指针指向的值。如下例中的ptr2不能指向常量const_a的地址。

void constPtr() {
  int var_a = 1;
  const int const_a = 2;
  int var_b = 3;
  const int const_b = 4;

  // case 1:
  int* ptr0 = &var_a;
  const int* ptr1 = &var_a;
  //int* ptr2 = &const_a;  // not ok
  const int* ptr3 = &const_a;
  ptr3 = &const_b;

   // case 2:
  int* const ptr4 = &var_a;
  // ptr4 = &var_b;  // not ok

  const int* const ptr5 = &var_a;
}

场景3: 修饰函数

case意义
void function_name(const int a){}没有实际意义,因为a是一个传值参数。函数执行完就不存在了
void function_name(const int* ptr_a){}表示不允许函数function_name修改ptr_a指向的值
void function_name(const int& a) {}表示不允许函数function_name修改a

场景4: 修饰类成员

const可以修饰类成员变量,也可以修饰类成员函数。

修饰类成员变量
  • 该类成员变量只能在构造函数的初始化列表中进行初始化。
  • 虽然可以在成员变量的地方直接进行赋值(c++11后支持这个骚操作),不建议。理由是类本身起一个描述某一数据类型的作用,不占用内存,只在实例化的时候占用内存。如果在变量定义的地方进行初始化,就很奇怪,你品,你细品。
修饰类成员函数
case意义
const void func_name() {…}不允许外界修改该函数的返回值
void func_name() const {…}不允许函数func_name修改类中的成员变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值