[C++]const

因为我老是弄混这个东西,所以考虑单独把这个写出来

1 const int* p

这个叫常量指针,意味着他可以对指向进行修改,而不能对值进行修改。

int main()
{
  int a = 10;
  int b = 10;

  const int *p1 = &a;
  //对指向进行修改,OK
  p1 = &b;
  //对值进行修改,error
  *p1 = 30;

  system("pause");
  return 0;
}

2 int *const p

这个叫指针常量,这意味着指向是不能变得,但是内容可以变。同时他就是引用&的本质。

int main()
{
  int a = 10;
  int b = 10;
  int *const p2 = &a;
  //修改内容,OK
  *p2 = 30;
  //修改指向,error
  p2 = &b;

  system("pause");
  return 0;
}

3 int const *

这个实际上也是常量指针,但别用了,看起来就别扭

4 const int * const p

常量指针常量,这将使得指向不能改,内容也不能改。

int main()
{
  int a = 10;
  int b = 10;

  const int *const p3 = &a;
	//error
  *p3 = 20;
	//error
  p3 = &b;

  system("pause");
  return 0;
}

5 函数中参数带const

如果你的参数不需要进行修改,请一定要养成使用const的习惯!这主要是为了防止你编代码遍傻了把里面的值给改咯。

6 成员函数带const

他的意思是该成员函数不会修改这个对象的任何数据成员。

class A
{
private:
  int a;
  //# 8 
  mutable int c;

public:
  A(int b = 2) : a(b) {}
  void add(int b) const {}
  void sub(int b) {}
  // # 8,inline内部被赋值修改
  void div(int b) const { c = b; }
};

class B : public A
{
};

int main()
{
//# 7
  const A a;
  a.add(2);
  A a1;
  a1.add(2);
  system("pause");
  return 0;
}

这种成员函数能够被const对象和非const对象同时访问。

7 类对象带const

接6,注意到有

const A a;

这意味着这个对象在初始化后就不再进行修改,因此他只能访问到带const的成员函数

a.sub(3);

则是错误的!因为sub没有带const,这意味着他有可能是能够改变a这个对象里面的数据。

8 mutable

接6,假设说有那么一种需求:虽然我定义了带const的成员函数,但是我还是希望在这里面可以修改某些数据变量。虽然这种要求显得莫名其妙(至少对于目前的我来说),但是C++提供这种操作,即在你需要改变的数据成员变量前面加mutable即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值