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

C++第十篇:const关键字

目录

1. 修饰变量

2. 修饰指针

3. 修饰函数参数

4. 修饰函数返回值

5.修饰类的成员变量

6. 修饰类的成员函数


const 是一个非常重要的关键字,用于声明常量或限制变量的修改权限,主要作用是保护数据不被意外修改,同时也能帮助编译器进行优化和类型检查。

1. 修饰变量

const int a = 10;
int const a = 10;//两者等价
a = 20; // 错误:不能修改const变量
  • 必须在声明时初始化(除了类的成员变量,可在构造函数初始化列表中初始化)
  • 可以通过指针间接修改(不推荐,属于未定义行为)

2. 修饰指针

// 情况1:指向常量的指针(指针指向的值不能修改)
const int* p1;
int const* p2; // 与上面等价// 情况2:指针常量(指针本身不能指向其他地址)
int* const p3;// 情况3:指向常量的指针常量(指针本身和指向的值都不能修改)
const int* const p4;

记忆技巧:const 总是修饰它左边的内容,如果左边没有内容,则修饰右边的内容。

简单说明:情况1实际等于 (const int)* p1  == (int const)* p2。 分析一下,const总是修饰左边的内容-----(int const)* p2  没有问题,这个意味着指向常量,即指向的值。那在来看看(const int)* p1,const左边没有,修饰右边,那这为什么是修饰 int 而不是 int*  ?

    实际上这和const的修饰规则有关,会修饰靠自己最近的基础类型。对于const int* p1,这也就说明了为什么会是(const int)* p1这样,int 就是最近的基础类型。

那对于情况2,根据上面的原则,int* const p3,修饰的就是最近的*(即指针),至于什么类型的就不管了,只要知道它指向的地址不能被修改就可以了。

3. 修饰函数参数

通常在一个类下有对应的打印函数,在参数列表前加上const,防止修改参数:

// 防止修改传入的参数
void print(const int num) {num = 20; // 错误
}

还可以再参数为引用的时候添加const关键字:

void display(const std::string& str) {str = "hello"; // 编译错误:const引用不允许修改
}

简单说一下这样写好处。首先,传参为引用的话,在一下比较大的情况下是非常节省资源的,加上

const关键字可以防止函数内部修改这个值,更加的安全。

4. 修饰函数返回值

修饰返回值 主要用于保护函数内部的数据不被外部随意修改,同时避免不必要的对象拷贝。

直接举例说明:

#include <iostream>
#include <string>using namespace std;class MyClass {
private:string internalStr = "内部数据"; // 类内部的字符串int arr[5] = {1, 2, 3, 4, 5}; // 类内部的数组
public:// 返回内部字符串的const引用const string& getString() {return internalStr;}const int* getArray() {return arr;}
};int main() {MyClass obj;const string& strRef = obj.getString(); // 获取const引用const int* arrPtr = obj.getArray(); //  获取const指针// 正确:可以读取cout << strRef << endl; // 输出 "内部数据"cout << obj.getArray()[0] << endl; // 输出 1strRef = "试图修改"; //错误:不能通过const引用修改原始数据arrPtr[0] = 10; //错误:不能通过const指针修改原始数据return 0;
}

直接返回引用也是可以引用可以避免不必要的拷贝,节省较多的资源。

5.修饰类的成员变量

使用const修饰成员变量后,该成员变量就只能在构造函数中初始化,这没什么好说的了。

class MyClass {
private:const int MAX_SIZE;
public:// 必须在初始化列表中初始化const成员MyClass(int size) : MAX_SIZE(size) {}
};

6. 修饰类的成员函数

在类的成员函数后加const,表示该函数不会修改类的任何成员变量(mutable 修饰的变量除外)

class MyClass {
private:int x;mutable int accessCount; // 允许在 const 函数中修改
public:// const成员函数,不能修改x// 也不能调用非const成员函数,避免间接的修改成员变量的值int getX() const {accessCount++; // 允许修改mutable成员变量return x;}void setX(int val) {x += val; // 非const函数可以修改成员变量}
};

代码中有2点需要注意:

  • const成员函数可以调用成员变量但不能修改,(mutable修饰的除外)。
  • const成员函数不可以调用非const的成员函数,避免间接的修改成员变量的值。

好了,这些就是一些常用的const关键字的情景。

http://www.dtcms.com/a/401114.html

相关文章:

  • 在哪个网站去租地方做收废站东莞做网站乐云seo
  • 网站关键词优化办法蘑菇头表情包制作网站
  • 网站服务器安全部署微信微官网如何制作
  • PD26虚拟机安装【2025最新】
  • 网站开发 软文做网站的软件有些什么
  • 大连网站建设 选领超科技wordpress目录权限设置密码
  • 阳江房产网站叮当设计网站
  • 做网站前台要学什么课程dw网页设计代码免费
  • 勤哲网站开发视频个人网站主页html5
  • 网站建设 今网科技极简wordpress主题、
  • 潍坊公司注册网站长治seo顾问
  • iis7.5部署网站招聘网站有哪些平台
  • 做营销型网站用什么技术微信公众号优惠劵网站怎么做的
  • 做公司网站开发的公司免费看舆情网站
  • 随州公司做网站深圳罗湖住房和建设局网站官网
  • 网站开发及app开发公司南昌网站优化
  • 中国建设银行网站签名通下载工信部企业网站备案
  • ps企业网站模板苏州建设网站制作
  • 温州网站建设制作泉州市住房和乡村建设网站
  • 免费源码资源站wordpress 数据库配置错误
  • 下载类网站开发条件营销网络的建设怎么写
  • 华为网站建设官网成都网站建设联系电话
  • 单页网站制作工具抖音小程序在哪里打开
  • 广东网站建设微信商城运营做网站编程用什么语言好
  • 响应式门户网站模板下载网龙网络公司简介
  • 衡阳网站优化公司ai建站工具
  • 河南专业网站建设公司哪家好广西百度seo
  • 沈阳手机网站制作25个优秀个人网站设计模板
  • 手机网站seo教程百度一下网页首页
  • 本网站服务器在海外龙岩网站报价