当前位置: 首页 > news >正文

C++关键字:const

文章目录

    • 一、const的四大作用
      • 1.修饰 变量、数组
      • 2.修饰 函数的形参、修饰 引用 (最常用)
      • 3.修饰 指针:常量指针、指针常量 、只读指针
      • 4.修饰 类的成员函数、修饰 类的对象

一、const的四大作用

1.修饰 变量、数组

1.const修饰变量:
被const修饰的变量,成为只读常量,防止误修改。
const修饰变量,该变量的值在初始化后就不会再被改变。若强行修改,则编译器会报错。

const int N = 1001; //算法题常用
const int a = 10;
const float b = 3.14;
const char c = 'A';a = 11; //报错
b = 3.15; //报错
c = 'B'; //报错

2.const修饰数组:
const修饰数组,则数组中元素的值在初始化后不可被修改。

const int a[] = {1,2,3};
//a[0] = 10;  //错误



2.修饰 函数的形参、修饰 引用 (最常用)

1.const修饰 函数的形参:
可以避免传递过来的值,在函数体内部被误修改。

void printString(const char* str){  //等价于const char str[]cout << "String:" << str << endl;
}

2.const 修饰 引用 (最常用):
引用避免了拷贝、const避免了函数对值的修改。
明确告诉函数的使用者,该参数在经过函数调用时不会被修改,提高了代码的清晰度和安全性。

void setName(string name){ //应优化为 const string &namem_name = name;
}
void printName(const string &name) {cout << "Name: " << name << endl;// name = "Sam"; // 错误:不能修改const引用指向的值
}



3.修饰 指针:常量指针、指针常量 、只读指针

1.常量指针:
const 先碰到 *,表示 变量的值不可修改 const int * ptr
指针的指向可以改变,指针指向的值不可修改。指针只能指向常量。

int a = 1, b = 1;
const int * ptr1 = &a;
ptr1 = &b;  //指针的指向可以修改
//*p1 = 10; //错误:常量指针,指针指向的值不可修改

2.指针常量:
const 先碰到指针,表示 指针不可修改 int * const ptr
指针是个常量,指针的指向不可修改,但是指向的变量的值可以改变

int a = 1, b = 1;
int * const ptr2 = &a;
//ptr2 = &b;  //错误:指针常量,指针指向不可修改
*ptr2 = 10;

3.只读指针:
两个const,表示 变量的值和指针都不可修改 const int * const ptr

int a = 1, b = 1;
const int * const ptr3 = &a;
//ptr3 = &b; //错误:只读指针,指针的指向不可改变
//*p3 = 10;  //错误:只读指针,指针指向的值不可修改

在这里插入图片描述



4.修饰 类的成员函数、修饰 类的对象

1.const 修饰 类的成员函数:
常成员函数 不会修改任何成员变量
成员函数后面加const,则该成员函数不可修改类的成员变量。除非成员变量前面加了关键字mutable

void test(int x) const;
#include <iostream>class Test {
public:int x;mutable int y;  // 可以在const成员函数中被修改Test(int val):x(val),y(0){//使用初始化列表,直接对成员变量初始化} void modify() const {  // const成员函数// x++;  // 错误:不能在const成员函数中修改非mutable成员y++;  // 正确:可以修改mutable成员}
};int main() {Test t(10);t.modify();std::cout << "t.y = " << t.y << std::endl;  // 输出 t.y = 1return 0;
}

2.const 修饰 类的对象:
常对象 只能调用 常成员函数
被const修饰的对象,只能调用类中 结尾带const的成员函数。

const People p;
http://www.lryc.cn/news/323184.html

相关文章:

  • nodejs 常用命令
  • nginx配置详解+nginx_lua模块的使用
  • 大数据--hdfs--java编程
  • 力扣由浅至深 每日一题.10 最后一个单词的长度
  • 21 OpenCV 直方图均衡化
  • 对七层代理、四层代理、正向代理、反向代理的认识
  • 网络: 五种IO模型
  • AI大模型学习在当前技术环境下的重要性与发展前景
  • 【呼市经开区建设服务项目水、电能耗监测 数采案例】
  • 深度学习算法工程师面试常见问题及解答
  • OKR与敏捷开发、精益创业等方法如何协同工作?
  • 【ESP32 Arduino】定时器的使用
  • 网络基础(一)初识
  • 作业:基于udp的tftp文件传输实例
  • 【数据结构和算法】-贪心算法
  • 路由器里如何设置端口映射?
  • M3C芯片——支持工业级HMI应用,集成2D加速、4路串口及2路CAN
  • 如何做时间管理?
  • 三级数据库技术考点(详解!!)
  • 【技术栈】Redis 企业级解决方案
  • (一)Linux+Windows下安装ffmpeg
  • docker的部署与安装以及部署一个docker(容器)应用及docker容器常出现的问题
  • harmonyOS简介及背景
  • 最新,955神仙公司名单(非外企)
  • 牛客周赛 Round 37 C.红魔馆的馆主
  • AWS监控,AWS 性能监控工具
  • PHP姓名快速匿名化工具(重组脱敏)
  • JAVA后端调用OpenAI接口 实现打字机效果(SSE)
  • 超店建站携手太洋物产,共建跨境生意增长解决方案
  • 提高企业员工生产力的办法