C++ const关键字常见用法

 更新时间:2026年06月23日 10:12:35   作者:Tim_10  
这段文章详细介绍了C++中const的关键概念及其常见用法,包括const修饰基本常量、指针、引用和成员函数,以及与constexpr的区别,强调const作为只读契约的重要性,感兴趣的朋友跟随小编一起看看吧

一、概念

  • const关键字在C++中不只是表示常量,他的核心是只读契约

二、const五大常见用法

1、基本常量

  • 用于替代#define
  • 特点:编译器常量,有类型检查,比宏安全
const int SIZE = 20;

2、const与指针

  • 根据const与指针符号*的前后位置,记忆口诀: 左定值,右定向

1)、指向常量的指针

  • const在*左边,定值
  • 特点:值不能改,但指针可以改(是顶层const)
const int* p = &a; 
*p = 10; // 错❌️ 
p = &b; // 对✅️

2)、常量指针

  • const在*右边,定向
  • 特点:指向不能改,但值可以改(是顶层const)
int* const p = &a;
*p = 10; // 对✅️ 
p = &b; // 错❌️

3)、指针常量指针

  • 既不能修改值,也不能修改指向
const int* const p = &a;

3、const引用传参

  • 函数的参数使用const进行修饰
  • 优点:
    • 避免拷贝,传递引用
    • 防止参数被修改,const保护作用
    • 可接受临时变量 printData("hello");
void printData(const std::string& str) { }

4、const成员函数

  • 在成员函数声明末尾加const,表示该函数不会修改任何非静止成员(变量mutable成员除外)
  • 特点:const对象只能调用const成员函数
class Student {
private:
    mutable int cache_hits; // 即使const函数也可以改
    int age;
public:
    // const成员函数内,this被隐式视为 const Student* const this
    int getAge() const { 
        // age = 10; // ❌ 编译报错
        cache_hits++; // ✅ 允许,因为mutable
        return age; 
    }
};

5、const修饰函数返回值

  • 返回引用防止返回值修改
const Student& getStudent() { return stu; } // 返回引用防修改
const int getValue() { return 1; }          // 防止 (a = getValue()) = 3 这样的左值赋值操作

三、指针常量、常量指针与 指针int* 的相互赋值

  • 底层const (const int *),规定指向的值不能改变,赋值给int*后,约束破坏了,他可以修改对象的值
  • 顶层const (int* const), 指向的指针不能改变,但是对象值可以改变,不受影响

四、constexpr与const的区别

  • const是运行时常量,只读契约
  • constexpr是编译器常量。

到此这篇关于C++ const关键字常见用法的文章就介绍到这了,更多相关c++ const使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言数据结构通关时间复杂度和空间复杂度

    C语言数据结构通关时间复杂度和空间复杂度

    对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间,这篇文章主要给大家介绍了关于C语言时间复杂度、空间复杂度的相关资料,需要的朋友可以参考下
    2022-04-04
  • Qt5.9实现简单的多线程实例(类QThread)

    Qt5.9实现简单的多线程实例(类QThread)

    Qt开启多线程,主要用到类QThread。用一个类继承QThread,然后重新改写虚函数run()。具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例)

    VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例)

    本篇文章介绍了VS2010/MFC编程:常用控件:树形控件Tree Control,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例有兴趣的可以了解一下。
    2016-12-12
  • 链接库动态链接库详细介绍

    链接库动态链接库详细介绍

    静态链接库.lib和动态链接库.dll。其中动态链接库在被使用的时候,通常还提供一个.lib,称为引入库,它主要提供被Dll导出的函数和符号名称,使得链接的时候能够找到dll中对应的函数映射
    2012-11-11
  • C++中的聚合类定义与用法分析

    C++中的聚合类定义与用法分析

    这篇文章主要介绍了C++中的聚合类定义与用法,结合实例形式分析了C++中聚合类的简单定义、使用方法与相关注意事项,需要的朋友可以参考下
    2017-08-08
  • Linux中使用VS Code编译调试C++项目详解

    Linux中使用VS Code编译调试C++项目详解

    最近因为项目的需求,需要在Linux下开发C++相关项目,经过一番摸索最终实现了,下面这篇文章就给大家简单总结了一下如何通过VS Code进行编译调试的一些注意事项。有需要的朋友们可以参考借鉴,下面来跟着小编一起看看吧。
    2016-12-12
  • C++中套接字库sockpp的使用详解

    C++中套接字库sockpp的使用详解

    sockpp是一个开源、简单、现代的C++套接字库,这篇文章主要为大家详细介绍一下套接字库sockpp的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-11-11
  • C++时间戳转化操作实例分析【涉及GMT与CST时区转化】

    C++时间戳转化操作实例分析【涉及GMT与CST时区转化】

    这篇文章主要介绍了C++时间戳转化操作,结合实例形式分析了C++时间戳转换与显示操作的原理与具体实现技巧,涉及GMT与CST时区转化,需要的朋友可以参考下
    2017-05-05
  • C语言判断语句和if语句形式及多层if使用示例

    C语言判断语句和if语句形式及多层if使用示例

    这篇文章主要为大家介绍了C语言判断语句和if语句形式及多层if使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C++使用模板实现单链表(类外实现)

    C++使用模板实现单链表(类外实现)

    这篇文章主要为大家详细介绍了C++使用模板实现单链表的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论