c++ const的使用

const的常见使用

1.const定义常量

const修饰的变量不可被修改

int main() {
  int a = 10;
  const int b = 20;
  b = a + b;
  std::cout << "b: " << b << std::endl;
}

编译报错:

const.cpp: In function 'int main()':
const.cpp:5:11: error: assignment of read-only variable 'b'
   b = a + b;
           ^

const修饰的变量一定需要初始化!!

const int b;
int main() {
  std::cout << "b: " << b << std::endl;
}

编译报错:

extern.cpp:2:11: error: uninitialized const 'b' [-fpermissive]
 const int b;
           ^

2.指针与const

定义

  • const int *ptr: 指向int型常量的指针,即指针指向的值为常量,不可被修改
  • int const *ptr: 同上
  • int *const ptr: 指向int型的常量指针,即指针为常量,指针不能指向其他变量,但是指针指向的值(为变量)可以被修改
  • const int *const ptr: 指向int型常量的常量指针,即指针为常量,指针指向的值也为常量,指针指向的值不能被修改,指针也不能再指向其他值
    好绕啊,总结一下就是:const在*左,值为常量;const在*右,指针为常量

代码为栗

  • const int *ptr:
#include <iostream>

int main() {
  int a = 85;
  const int *ptr = &a; //声明一个指向常量的指针
  std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 85
  int b = 8585;
  ptr = &b; //可以修改指针的指向
  std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 8585
  *ptr = 8585; //error, 想修改指针指针指向的值,但这个值现在是个const,不能被修改
  std::cout << "*ptr: " << *ptr << std::endl;
}
# "*ptr = 8585"会引起error:
const_ptr.cpp:10:10: error: assignment of read-only location '* ptr'
   *ptr = 8585; //error, 想修改指针指针指向的值,但这个值现在是个const,不能被修改
          ^~~~
  • int *const ptr:
#include <iostream>
int main() {
  int a = 85;
  int *const ptr = &a; //常量指针初始化
  //int *ptr = &a;
  std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 85
  int b = 8585;
  *ptr = b; //修改常量指针指向的变量值
  std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 8585
  ptr = &b; //error, 想修改指针,但是这里是个常量指针,不可被修改
  std::cout << "*ptr: " << *ptr << std::endl;
}
# "ptr = &b"会引起error:
ptr_const.cpp:10:10: error: assignment of read-only variable 'ptr'
   ptr = &b;
          ^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值