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

C++的const关键字

在 C++ 中,const 关键字用于声明常量,表示某个变量或对象的值在初始化后不可改变。const 可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const 的各种用法:

1. 常量变量

const 可以用来声明常量变量,这些变量在初始化后不能被修改。

const int a = 10; // a 是一个常量,不能被修改
// a = 20; // 错误:不能修改常量

2. 常量指针

const 可以用于指针,表示指针所指向的数据是常量,或者指针本身是常量,或者两者都是常量。

  • 指针指向常量数据

    const int* p = &a; // p 指向常量数据,不能通过 p 修改 a
    // *p = 20; // 错误:不能修改常量数据
    p = &b; // 正确:可以改变 p 指向的地址
    
  • 常量指针

    int* const p = &a; // p 是常量指针,不能改变 p 指向的地址
    // p = &b; // 错误:不能改变常量指针的地址
    *p = 20; // 正确:可以修改 p 指向的数据
    
  • 常量指针指向常量数据

    const int* const p = &a; // p 是常量指针,指向常量数据
    // *p = 20; // 错误:不能修改常量数据
    // p = &b; // 错误:不能改变常量指针的地址
    

3. 常量引用

const 可以用于引用,表示引用所绑定的对象是常量。

const int a = 10;
const int& ref = a; // ref 是常量引用,不能通过 ref 修改 a
// ref = 20; // 错误:不能修改常量引用

4. 常量成员函数

const 可以用于成员函数,表示该成员函数不会修改类的成员变量。

class MyClass {
public:
    int getValue() const; // 常量成员函数
private:
    int value;
};

int MyClass::getValue() const {
    return value; // 可以读取成员变量,但不能修改
    // value = 20; // 错误:不能在常量成员函数中修改成员变量
}

5. 常量参数

const 可以用于函数参数,表示传入的参数是常量,函数内部不能修改这些参数。

void print(const std::string& str) {
    // str = "Hello"; // 错误:不能修改常量参数
    std::cout << str << std::endl;
}

6. 常量表达式

C++11 引入了 constexpr 关键字,用于声明编译时常量表达式。

constexpr int add(int a, int b) {
    return a + b;
}

constexpr int c = add(10, 20); // c 是编译时常量

7. 常量成员变量

const 可以用于类的成员变量,表示该成员变量在初始化后不能被修改。

class MyClass {
public:
    MyClass(int v) : value(v) {} // 初始化常量成员变量
    int getValue() const { return value; }
private:
    const int value; // 常量成员变量
};

总结

const 关键字在 C++ 中主要用于确保数据的不可变性,提高代码的可读性和安全性。合理使用 const 可以帮助编译器捕获潜在的错误,并使代码更加清晰和可靠。


http://www.kler.cn/news/367137.html

相关文章:

  • 网络原理之 TCP解释超详细!!!
  • eks节点的网络策略配置机制解析
  • 书生第四期作业:L0G4000 任务作业
  • mysql 通过GROUP BY 聚合并且拼接去重另个字段
  • (三)第一个Qt程序“Qt版本的HelloWorld”
  • 基于信号分解和多种深度学习结合的上证指数预测模型
  • ELK收集nginx日志
  • 【Java基础】2、Java基础语法
  • Spring Boot实现的动态化酒店住宿管理系统
  • SQLite 数据库设计最佳实践
  • 在服务器启动docker容器卡住、无启动成功信息,docker ps一a状态码137
  • Flutter杂学: iOS 上启用自动填充和关联域
  • Rust 中的条件变量:深入解析与实践
  • TensorFlow面试整理-模型部署与优化
  • 练习LabVIEW第二十题
  • Kafka相关API开发
  • sass软件登录设定——未来之窗行业应用跨平台架构
  • [论文笔记]ColPali: Efficient Document Retrieval with Vision Language Models
  • 使用kubeadm安装k8s1.24高可用集群
  • C++标准模板库--list
  • Spring MVC 为什么是 MVC 而不是 MVP
  • H3m-Blog
  • ctfshow(55,56)--RCE/命令执行漏洞--无字母RCE与强制文件上传RCE
  • Python浪漫之画一个圆月亮
  • sqlserver用ip登录
  • 基于SSM的儿童众筹救助系统设计与实现